【发布时间】:2018-05-23 05:39:22
【问题描述】:
有些东西我不是很清楚,如果有人可以帮助我:
let arr = [1,2,3,4,5,6,7];
let b = 0
for (let a of arr) {
setTimeout(() => {
console.log(b, a)
}, 2000)
b = b + 1;
}
/* Output
7 1
7 2
7 3
7 4
7 5
7 6
7 7
*/
假设b 等于7,因为2 秒后,变量b 等于7,那么为什么a 的行为与b 不同?
【问题讨论】:
-
b 是一个全局变量,由您的 for 循环计数(始终是相同的变量 b)。 a 在您的 for 循环中声明,因此对于每次迭代,您都会获得具有新值的 a 的新实例。此实例可在您的 for 循环中使用,并绑定到传递给 setTimeout 的匿名函数。查看 MDN 了解有关 let 的详细信息:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…