当我使用let声明[重复]时在初始化区域中的语句的语义

问题描述 投票:1回答:2

我知道当我在循环中声明let变量时,会在每个循环中声明该变量。例如:

for(let i=0 ; i<3 ; i++)
{
    let x=1;
}

变量x声明了3次,即为循环中的每个变量分配了三个不同的位置。

但是变量i发生了什么?声明一次吗?还是单独初始化一次,但也声明了三次?

我想了解它在幕后发生的事情。

javascript ecmascript-6
2个回答
2
投票

使用leti声明一次,并在每个循环中获得一个新的绑定。并且其范围仅在block语句内部可见。

从这里Variables and scoping in ECMAScript 6

let in loop heads

在循环中,如果您let-声明一个变量,则每次迭代都会得到一个新的binding。允许您这样做的循环为:forfor-infor-of

for (let i = 0; i < 3; i++) {
    let x = 1;
    setTimeout(() => console.log(i), 1000);
}

0
投票

i并非在每个周期都声明。试试这个,你会得到一个错误:

for (const i = 0; i < 9; i++) {
   console.log(i);
   // more statements
}

错误:未捕获的TypeError:分配给常数变量。

参考here

© www.soinside.com 2019 - 2024. All rights reserved.