使用setTimeOut()进行闭包的示例

时间:2017-12-09 09:17:54

标签: javascript closures

有人可以向我解释为什么代码没有按预期行事吗?

为什么会发生这种情况?我知道这是由于“范围”,但我不知道确切的机制。

“考虑到上面的代码,控制台将显示四条相同的消息”未定义的值是索引: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也解决了这个问题,但我无法理解为什么。

1 个答案:

答案 0 :(得分:-1)

允许您将范围有限的变量声明为使用它的块,语句或表达式。这与 var 关键字不同, var 关键字全局定义变量,或者无论块范围如何,都在本地定义整个函数。

相关问题