我很困惑为什么下面的代码片段有 (i)
最后:
for (var i = 0; i < 10; i += 1) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i);
}
我在我工作过的生产代码中看到过它——我只是凭直觉知道为什么它是必要的。
最佳答案
您正在定义一个内联函数,因此您可以在执行 console.log
语句时强制 i
参数位于本地范围内。通过添加参数,您将创建一个自执行函数。类似的还有下面的语句,读起来可能会更好......
function logmeWithTimeOut(value) {
setTimeout(function() { console.log(value); }, 1000);
}
for (var i = 0; i < 10; i++) {
logmeWithTimeout(i);
}
虽然我可能更喜欢
function logmeWithTimeout(value) {
console.log(value);
}
for (var i = 0; i < 10; i++) {
setTimeout(logmeWithTimeout.bind(undefined, i), 1000);
}
它强制 i 在本地范围内,否则你的日志将只打印 11
关于Javascript迭代器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30088672/