javascript - setTimeout立即执行

标签 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>

最佳答案

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

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

您直接调用了 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()

关于javascript - setTimeout立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842276/

相关文章:

javascript - 为什么我能够在不注入(inject)模块的情况下访问 Angular 服务?

javascript - 如何在 puppeteer 中访问全局变量

javascript - 如何基于节点模块从 JavaScript 文件创建构建?

javascript - onPress 事件不适用于 React Native 中的 View 、图像、可触摸不透明度

javascript - 如何在 React 中将 JSON 数据显示为表格

javascript - JS 调用堆栈总是至少有一个框架吗?

javascript - 在 ng-repeat 中使用 ng-list 分割字符串

javascript - 如何在 jQuery 中删除异常的类

javascript - 使用 Tablesorter/jquery 表格行悬停突出显示?

javascript - 如何检测CSS动画的重绘率(fps)?