【发布时间】:2015-10-25 22:50:20
【问题描述】:
var messages = ["Check!", "This!", "Out!"];
for (var i = 0; i < messages.length; i++) {
setTimeout(function () {
console.log(messages[i]);
}, i * 1500);
}
// -> prints 3* undefined
for (let i = 0; i < messages.length; i++) {
setTimeout(function () {
console.log(messages[i]);
}, i * 1500);
}
// -> prints out the array
我了解“var”的工作原理,并且已经习惯了 - 作用域是功能性的。然而,让声明远非明确。我知道它有块范围,但为什么这在示例中很重要?在该示例中,for 循环在这两种情况下都存在很长时间。为什么 let 打印出数组?
【问题讨论】:
-
你到底在打印什么?
-
循环结束很长时间并不重要 - JS 有闭包。那些也关闭了块范围
标签: javascript scope var let