我的一些 JavaScript 代码有问题。
Script
setTimeout(function() {
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, i * 200);
}
}, 200);
Outputs
5, 5, 5, 5, 5 而不是 1, 2, 3, 4, 5
我可以理解为什么这不起作用,但我想知道是否有人可以向我解释发生了什么以及为什么它不起作用!
另外,如何克服这个范围问题?
The setTimeout
回调函数都是异步执行的,所有的console.log
您拨打的电话指的是同一件事i
变量,并且在执行它们时,for循环结束了 and i
包含 4.
你可以包裹你的内心setTimeout
在接受参数的函数内部调用,以存储对所有参数的引用i
正在迭代的值,如下所示:
setTimeout(function() {
for (var i = 0; i < 5; i++) {
(function (j) { // added a closure to store a reference to 'i' values
setTimeout(function() {
console.log(j);
}, j * 200);
})(i); // automatically call the function and pass the value
}
}, 200);
查看我对以下问题的回答以了解更多详细信息:
- 匿名函数中的变量——有人能解释一下以下内容吗? https://stackoverflow.com/questions/1552941
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)