js语句执行顺序

凡是使用function FunctionName(){}这种方式定义的函数,浏览器会预先把他们提取出来分析,然后再执行其他的代码。 
当你定义了两个相同的函数时,后面的会覆盖前面的。 
详细如下(为了方便说明,我加了行号): 
<script> 
1 function A(){alert(1);} 
2 A(); 
3 function A(){alert(2);} 
4 A(); 
5 A = function(){alert(3);} 
6 A(); 
</script> 

执行的顺序: 
1行 >> 3行 >> 2行 >> 4行 >> 5行 >> 6行; 
因为浏览器会预先执行function ***(){};这样的代码。所以执行完第一行就继续寻找类似“function ***(){};”这样结构的代码,因此上例就跳过第二行执先行了第三行,当执行完第三行时,第一行定义的function A已经被第三行覆盖。而第5行虽然A的值是一个函数,但是它是以变量的形式声明的,因此不会被预先执行。也就是说只有以function关键字开头声明的函数会被预先执行。

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

以上是正常情况。

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

相关资料:http://zhidao.baidu.com/link?url=wsbj5Gi2epUyVz0YrZDoi-Qnu2i8RwJ-I0S8O_ymgY4FT0C6ibQLtqtsAZUwneordU3_m9nMDRW1vaNaQyG72I7U7Mi4iV8ZCLhUzQxuLGa

比较详细的好文章:

http://blog.csdn.net/a7458969/article/details/6328751

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值