我知道当我在循环中声明let变量时,会在每个循环中声明该变量。例如:
for(let i=0 ; i<3 ; i++)
{
let x=1;
}
变量x
声明了3次,即为循环中的每个变量分配了三个不同的位置。
但是变量i
发生了什么?声明一次吗?还是单独初始化一次,但也声明了三次?
我想了解它在幕后发生的事情。
使用let
,i
声明一次,并在每个循环中获得一个新的绑定。并且其范围仅在block语句内部可见。
从这里Variables and scoping in ECMAScript 6:
let
in loop heads在循环中,如果您
let
-声明一个变量,则每次迭代都会得到一个新的binding。允许您这样做的循环为:for
,for-in
和for-of
。
for (let i = 0; i < 3; i++) {
let x = 1;
setTimeout(() => console.log(i), 1000);
}
i
并非在每个周期都声明。试试这个,你会得到一个错误:
for (const i = 0; i < 9; i++) {
console.log(i);
// more statements
}
错误:未捕获的TypeError:分配给常数变量。
参考here。