javascript的执行顺序

先看下面两段js程序,先是定义式函数写法:
  1. <script type="text/javascript">
  2. function myfunc(){
  3. alert("第一次调用");
  4. };
  5. myfunc(); //得出的是 第二次调用
  6. function myfunc() {
  7. alert("第二次调用");
  8. };
  9. myfunc(); //得出的是 第二次调用
  10. </script>
接下来是变量式函数写法:
  1. <script type="text/javascript">
  2. var myfunc = function (){
  3. alert("第一次调用");
  4. };
  5. myfunc(); //得出的是 第一次调用
  6. myfunc = function () {
  7. alert("第二次调用");
  8. };
  9. myfunc(); //得出的是 第二次调用
  10. </script>
在定义式函数写法的代码中执行两个方法后的结果是一样的,就等于定义式函数中第一个函数没起到任何作用,得到的都是第二个函数的结果,从结果来看,JavaScript执行顺序不是按顺序一条一条来执行。
在变量式函数写法的代码中执行两个方法后的结果是不同的,从这来看,JavaScript执行顺序是按顺序一条一条来执行的,
从这两个不同函数的表示方法来看,在同一段程序的分析执行中,定义式函数有优先权,定义式函数执行完后,其他语句(包括变量式函数)才顺序执行,那么下面的例子也就不难得出结果了:
  1. <script type="text/javascript">
  2. function myfunc(){
  3. alert("第一次调用");
  4. };
  5. myfunc(); //输出 第二次调用
  6. var myfunc = function (){
  7. alert("第三次调用");
  8. }
  9. myfunc();//输出 第三次调用 上次的结果已经被这次的变量式函数结果覆盖
  10. function myfunc() {
  11.        alert("第二次调用");
  12. };
  13. myfunc();//输出 第三次调用  function myfunc()已经不再执行
  14. myfunc = function () {
  15. alert("第四次调用");
  16. }
  17. myfunc();//输出 第四次调用
  18. </script>
结果就不像我们上次分析的那样了,这里的改变就是把两个相同的方法放在两个JavaScript片段里,这时两个方法都得出各自的结果,这里也就说明JavaScript是按一段一段来分析执行的,如下面代码:
  1. <script type="text/javascript">
  2. myfunc();//输出 第一次调用
  3. var myfunc = function (){
  4. alert("第二次调用");
  5. }
  6. myfunc();//输出 第二次调用
  7. function myfunc() {
  8. alert("第一次调用");
  9. };
  10. </script>
  11. <script type="text/javascript">
  12. myfunc();//输出 第三次调用
  13. var myfunc = function (){
  14. alert("第四次调用");
  15. }
  16. myfunc();//输出 第四次调用
  17. function myfunc() {
  18. alert("第三次调用");
  19. };
  20. myfunc();//输出 第四次调用
  21. </script>
贴内牛人总结:
1、<script>中的代码是阻塞式同步下载执行的,当浏览器遇到一个<script>标签会先下载这个标签的代码然后执行。在完成这件事之前不会加载其他任何标签和资源。
2、变量和函数的声明发生在代码解析期,但是,变量赋值发生在运行期,因此反复声明同名函数和变量,最后一次声明的函数被保存下来,直到运行到变量赋值的代码才发生变化。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(90) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值