javascript - jquery $.each 与 for 循环(具有异步内容)

标签 javascript jquery loops asynchronous

两者的主要区别是什么:

    var test=[5,6,7,8,9];
    $.each(test, function (i, num) {
        setTimeout(function(){console.log('i: '+i+'  '+num)},500);
    });
    for (var j = 0; j < test.length; j++) {
        setTimeout(function(){console.log('j: '+j+'  '+test[j])},500);
    }

第一个循环输出:

i: 0  5
i: 1  6
i: 2  7
i: 3  8
i: 4  9

第二个循环输出:

5次'j:5未定义'

我理解为什么第二个循环会这样做,但不明白为什么 $.each “按预期”工作

谢谢!

最佳答案

在第一个片段的幕后,对于每次迭代,您提供的回调都会被调用。这意味着,它会在内部为每次迭代创建一个范围。最终变成了一个 cloure。

但是在第二个片段中。当超时回调被触发时,将使用初始范围。所以它正在显示该输出。您可以使用以下代码使其工作,

for (var j = 0;j<test.length-1;j++) {
 var scope = function(i) { 
  setTimeout(function(){console.log('j: '+i+'  '+test[i])},500);
 };
 scope(j);
}

关于javascript - jquery $.each 与 for 循环(具有异步内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395172/

相关文章:

javascript - 通常如何使用 jQuery 循环遍历表单中的输入元素?

javascript - 在设备准备好之前运行的 jquery 移动功能

Javascript - $(document).on ("click", "selector", function ... 之间的区别和 $ ("selector").on ("click", 函数 ....);

JavaScript:当我尝试使用 DOM 时,我的 for 循环似乎不起作用

javascript - Karma - 找不到模块 : Error: Cannot resolve module 'scss'

javascript - openlayers、decarta 和 google maps 之间的性能差异

python - Snakemake,如何为两个独立参数构建循环

Java 两个 for 外部 for 循环,两个内部 for 循环添加到字符串,第一个不执行任何操作

javascript - 附加 defs 标签并在 D3.js 的 SVG 中使用它

Jquery - 检查表单提交上是否有坏词?