有些事情我没有清楚地理解,如果有人可以帮助我:
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
的行为与{{1}不同}
答案 0 :(得分:1)
区别在于范围变量如何与let
关键字一起使用。在这种情况下,您将为循环的每次迭代定义一个新的a
。但是每次迭代都是相同的b
变量。
在循环结束之前,超时实际上不会开始触发。到目前为止,每个超时函数范围都被赋予了不同的a
,但是获取了b
的相同最终值。