博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js语句执行顺序
阅读量:7045 次
发布时间:2019-06-28

本文共 766 字,大约阅读时间需要 2 分钟。

hot3.png

凡是使用function FunctionName(){}这种方式定义的函数,浏览器会预先把他们提取出来分析,然后再执行其他的代码。 当你定义了两个相同的函数时,后面的会覆盖前面的。 详细如下(为了方便说明,我加了行号):  执行的顺序: 1行 >> 3行 >> 2行 >> 4行 >> 5行 >> 6行; 因为浏览器会预先执行function ***(){};这样的代码。所以执行完第一行就继续寻找类似“function ***(){};”这样结构的代码,因此上例就跳过第二行执先行了第三行,当执行完第三行时,第一行定义的function A已经被第三行覆盖。而第5行虽然A的值是一个函数,但是它是以变量的形式声明的,因此不会被预先执行。也就是说只有以function关键字开头声明的函数会被预先执行。

这 就是执 行顺序导致的。JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且在分析执行同一段 代码中,定义式的函数语句会被提取出来优先执行。函数定义执行完后,才会按顺序执行其他代码。也就是说,在第一次调用hello函数之前,第一个函数语句 定义的代码已经被第二个函数定义语句的代码覆盖了,这就是为什么在例子2中第一次调用hallo时,也会输出后面定义的函数内容的原因了。

以上是正常情况。

如果涉及到Ajax请求,你得设置同步的属性,才能保证语句可以顺序(同步)执行。

相关资料

比较详细的好文章:

看完之后,知道了js的预编译和执行阶段的概念,真是一篇很不错的文章。

最后还提到了用document.write导入js时可能产生的浏览器兼容问题以及解决办法。可惜对这种用法不熟,没看懂。

转载于:https://my.oschina.net/u/1379006/blog/267051

你可能感兴趣的文章
大数据时代,合作才能有效提升资源配置和使用效率
查看>>
当碎片化遇到集成化,CRM该何去何从
查看>>
IBM CEO向特朗普发公开信:支持税改 为促进就业建言
查看>>
Mission Impossible - 说说攻破Chrome究竟有多难
查看>>
他们黑了推特CEO的推特账号 只是为了证明自己
查看>>
解读Java环境变量配置
查看>>
在线可信联盟:IoT安全与全球变暖一样 形势严峻需要共担责任
查看>>
约8937亿元:台积电创下台湾企业市值最高纪录
查看>>
Bitbucket引入了强制双因素认证和IP白名单特性
查看>>
SDN控制器测试工具面世 RYU性能测试报告发布
查看>>
英国四高校携手开展智能传感器系统研究
查看>>
Oracle 12.2新特性掌上手册 - 第三卷 Core Improvements
查看>>
2017年人们对数据中心速度的需求有所增加
查看>>
【过程改进】总结大中小型项目的git流程
查看>>
“十三五”输电通道规模倍增 重点建设配电网
查看>>
人脸识别这杯“羹” 各路资本纷纷切入
查看>>
创新为媒,重塑CDN市场
查看>>
新区发力“互联网+”政务服务 云平台互联互通
查看>>
简述数据中心四种数据备份方式
查看>>
现代数据集成所需的业务层面
查看>>