javascript - setInterval中使用setTimeout时出现的问题

标签 javascript

我想在setInterval中使用setTimeout。第一次打印 out_k:0。在间隔之后,它打印 out_k:1, inside_k:0?我不明白,我认为 inside_k 应该是 1ouside k1,太奇怪了。

     var i = 0;
     var timer = setInterval(function(){
        if(i < arr.length){
            var k=i;
            //console.log("out_i:"+i);
            console.log("out_k:"+k);                
            setTimeout(function(){
                //console.log("inside_i:"+i);
                console.log("inside_k:"+k);
            },500);
            i++;
        }else {
            clearInterval(timer);
        }   
    },500);

最佳答案

这是代码执行期间的事件序列

1) 将 setInterval 的第一个实例排队,在 500 毫秒后执行

2) 500ms 后,它会将 setInterval第二个实例排队,并执行 setInterval第一个实例,打印out_k0。当 k 的值仍为 0 时,它还会将 setTimeout 排队在 500 毫秒后执行。

3) 500ms 后,它会将 setInterval 的第三个实例排队,并执行 setInterval 的第二个实例并打印 out_k1,因为 k 的值为现在为 1,但 setTimeout 的第一个实例也使用 inside_k0

执行

等等。

关于javascript - setInterval中使用setTimeout时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308002/

相关文章:

javascript - 尝试从 Google Books API append 信息时获取对象 Object

javascript - 丑化 css 类名,如 instagram 或 facebook

javascript - 通过更多项目获取元素

javascript - 使用 Browserify 具有多个构建配置的复杂主干应用程序

javascript - 将字符串解析为数组

javascript - 通过JQuery根据子图片名称删除一个元素

javascript - 无法在本地系统上使用 javascript HTML DOM 解析 xml 数据

javascript - Google Apps 脚本 .getLastColumn();特定行的?

Javascript 正则表达式替换 - 交换位置

javascript - 在 while 循环中嵌入 Optgroup 的选择组