有人可以向我解释为什么代码没有按预期行事吗?
为什么会发生这种情况?我知道这是由于“范围”,但我不知道确切的机制。
“考虑到上面的代码,控制台将显示四条相同的消息”未定义的值是索引:4“。”
const arr = [10, 12, 15, 21];
for (var i = 0; i < arr.length; i++) {
setTimeout(function() {
console.log(`The value ${arr[i]} is at index: ${i}`);
}, (i+1) * 1000);
}
声明我使用'let'解决问题;
将setTimeOut()放入IIFE也解决了这个问题,但我无法理解为什么。
答案 0 :(得分:-1)
让允许您将范围有限的变量声明为使用它的块,语句或表达式。这与 var 关键字不同, var 关键字全局定义变量,或者无论块范围如何,都在本地定义整个函数。