【问题标题】:setTimeout instantly executing [duplicate]setTimeout 立即执行
【发布时间】:2016-08-09 04:47:27
【问题描述】:

Javascript 正在立即执行此代码,但是我需要它等待 2 毫秒才能执行它,如 setTimeout(doIt(i),2000); 中的脚本所示

为什么?

<script type="text/javascript">
    var colors= ["red","pink","green"];
    function doIt(i){
        i++
        console.log(i);
        console.log("didIt");
        $('body').append("<style>body{background:"+i+";}</style>");
        if(i==2){
        }
        else{
            test(i);
        }

    }

    function test(i){
        setTimeout(doIt(i),2000);
    }
    test(0);
</script>

【问题讨论】:

  • setTimeout 第一个参数是对函数的引用
  • 函数表达式和函数调用的区别:括号。一个是函数,另一个是函数返回的值。

标签: javascript


【解决方案1】:

这是最常见的错误。将您的代码更改为:

function test(i){
    setTimeout(function() {
        doIt(i);
    }, 2000);
}

您直接调用了doIt 方法,而不是通过在doIt 之后写入(i) 来传递对setTimeout 回调的引用。

另一种直接使用bind()方法的写法:

function test(i) {
    setTimeout(doIt.bind(null, i), 2000);
}

这里都给出了:

  1. How can I pass a parameter to a setTimeout() callback?
  2. Calling functions with setTimeout()

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多