setTimeout立即执行

时间:2016-08-09 04:47:28

标签: javascript

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>

1 个答案:

答案 0 :(得分:4)

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

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

您直接调用doIt方法,而不是仅在setTimeout之后写(i)来将引用传递给doIt回调。

使用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()