美文网首页让前端飞
你真的懂setTimeout吗(一)

你真的懂setTimeout吗(一)

作者: 河的左岸 | 来源:发表于2017-06-03 00:00 被阅读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
    原因:这里用到了形参传值。

    相关文章

      网友评论

        本文标题:你真的懂setTimeout吗(一)

        本文链接:https://www.haomeiwen.com/subject/ndlpfxtx.html