码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript学习之setTimeout

时间:2015-03-29 23:26:07      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

《JavaScript权威指南》第四版中说“window对象方法setTimeout()用来安排一个JavaScript的代码段在将来的某个指定时间运行”。

setTimeout(foo,i); // foo是回调函数,i是延时时间

注意“将来”一词,setTime会把foo函数放到队列中,当线程空闲的时候,JavaScript才会去执行队列里的事件。

看下面的代码:

<!DOCTYPE HTML>
<html>
  <head>
    <script type="text/javascript">
      
      window.onload = function () {
        var a = 0;
      function one() {
        for (var i = 0; i < 10; i++) {
          console.log(i);
          setTimeout(function(){
            console.log(a);
            a += i;

          },0);
        };

      }
      function two() {
        alert(a);
      }
        one();
        setTimeout(two,0);
      }
    </script>
  </head>
</html>

这里其实one函数看着像是会正常把a从0加到9,然后alert出来。

但实际上的alert结果是100,为什么?

one函数的for循环是不会因为setTimeout停下的,它遇到setTimeout的时候只会把里面的回调函数放到队列里面去,然后继续i++。等执行完所有的for循环才会去执行刚才放到队列的函数。因为循环完了所以i是10,总共有10个相同的a+=i;操作的函数被调用,最后a的结果就变成了100了。

但是其实上面代码有部分我还是不明白,就是如果setTimeout(two,0);改成setTimeout(two(),0);的话,alert的结果就变成了0。

setTimeout的第一个参数是函数对象,如果变成two(),那回调函数就变成了two的返回值。

 

 

 

 

 

 

技术分享

JavaScript学习之setTimeout

标签:

原文地址:http://www.cnblogs.com/AminHuang/p/4376635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!