让前端飞

你真的懂setTimeout吗(一)

2017-06-03  本文已影响0人  河的左岸

问题:请从1到10打印到控制台,每隔一秒打印一个数字。不要用全局变量和递归。

for(var i = 1;i < 11;++i) {
    setTimeout(function(){
      console.log(i);
   },1000); 
}

上面的代码,真正得到的并不是预期的效果,而是打印了10次11,而且是在几乎同时打印出来的(取决了执行一次for语句需要多长时间)。
原因:并不会等待执行完setTimeout,再进行下一次循环。

for(var i = 1;i < 11;++i) {
    setTimeout(function(){
      console.log(i);
   },1000 * i); 
}

效果:每秒钟打印一次11.
原因:调用setTimeout(fun, millisecond)时,取i是1到10;但是在执行setTimeout时,console.log(i);中的i已经是11 了

function st(n){
    setTimeout(function(){
        console.log(n);
    },1000 * n); 
}

for(var i = 1;i < 11;++i) {
    st(i);
}

效果:成功。每秒钟打印一次,从1到10
原因:这里用到了形参传值。

上一篇 下一篇

猜你喜欢

热点阅读