【发布时间】:2016-06-13 18:32:11
【问题描述】:
在下面的代码中,我使用 IIFE 在循环的当前迭代期间立即执行闭包。
for(var i = 0; i < 3; i++) {
console.log('Im in counter ' + i);
(function() {
var num = i;
setTimeout(function() {
console.log(num);
},0);
})();
};
上面的代码打印输出如下:
我在柜台 0
我在 1 号柜台
我在柜台 2
0
1
2
如果在当前迭代中立即调用闭包,则以下输出是预期的,而不是上面给出的实际输出。谁能解释在 for 循环中 IIFE 这种奇怪行为的原因?
我在柜台 0
0
我在 1 号柜台
1
我在柜台 2
2
【问题讨论】:
-
您缺少
setTimeout的第二个参数。 -
setTimeout将函数排入队列以在未来某个时间点运行。在0的超时下,在当前运行的代码/函数完成后将其排队。浏览器将完成该功能,可能会运行一些其他事件/代码然后运行您的超时。
标签: javascript closures iife