Javascript 重新初始化let-in for循环

Javascript 重新初始化let-in for循环,javascript,ecmascript-6,scope,let,Javascript,Ecmascript 6,Scope,Let,我在这段代码中发现了一点奇怪的行为: for (let i = 1; i < 2; i++) { let i = 10; console.log(i); } for(设i=1;i

我在这段代码中发现了一点奇怪的行为:

for (let i = 1; i < 2; i++) {
  let i = 10;
  console.log(i);
}
for(设i=1;i<2;i++){
设i=10;
控制台日志(i);
}
我原以为它会抛出语法错误,因为声明加倍了,但它可以工作并打印10。 也许有人能解释一下?为什么它不是相同的环境并执行阴影?
谢谢

您可以在函数范围内重新分配和覆盖let变量。当let变量在同一范围内重新声明时,您将遇到错误,告诉您let i已经被定义。它覆盖得很好


使用let变量的主要原因之一是在使用受限内存时,因为let变量是严格的。但是,您可以在函数范围内使用变量,因为变量的更改仅在该范围内。只有在同一范围内重新声明变量时,才会出现问题中提到的语法错误。

您可以在函数范围内重新分配和覆盖let变量。当let变量在同一范围内重新声明时,您将遇到错误,告诉您let i已经被定义。它覆盖得很好


使用let变量的主要原因之一是在使用受限内存时,因为let变量是严格的。但是,您可以在函数范围内使用变量,因为变量的更改仅在该范围内。只有在同一范围内重新声明变量时,才会出现问题中提到的语法错误。

您不能在同一范围内重新声明同一变量

let scope=“声明一”;

让scope=“声明二”//错误
不能在同一范围内重新声明同一变量

let scope=“声明一”;

让scope=“声明二”//错误
在同一范围内,不允许重新声明某些变量。 范围由
花括号/{}
定义。在
{}
中,不能重新声明某个变量。 试试这个

for (let i = 1; i < 2; i++) {
    let i = 10;
    let i = 20;
    console.log(i);
}
for(设i=1;i<2;i++){
设i=10;
设i=20;
控制台日志(i);
}
这将抛出一个错误。因为这里重新声明了
i

混淆之处在于循环控制变量
i
。控制变量引用了循环范围。控制变量
i
不在
{}
中声明的
i
的范围内。这就是为什么这是有效的

在同一范围内,不允许重新声明某些变量。 范围由
花括号/{}
定义。在
{}
中,不能重新声明某个变量。 试试这个

for (let i = 1; i < 2; i++) {
    let i = 10;
    let i = 20;
    console.log(i);
}
for(设i=1;i<2;i++){
设i=10;
设i=20;
控制台日志(i);
}
这将抛出一个错误。因为这里重新声明了
i

混淆之处在于循环控制变量
i
。控制变量引用了循环范围。控制变量
i
不在
{}
中声明的
i
的范围内。这就是为什么这是有效的

您可以在函数范围内重新分配和覆盖let变量。当let变量在全局范围内重新声明时,您将遇到错误,告诉您let i已经被定义。这篇文章:写得很好。@Martin,我查一下,谢谢!您可以在函数范围内重新分配和覆盖let变量。当let变量在全局范围内重新声明时,您将遇到错误,告诉您let i已经被定义。这篇文章:写得很好。@Martin,我查一下,谢谢!非常感谢。我在你的最后一段中发现了我的错误谢谢!我在你的最后一段中发现了我的错误非常感谢你的解释,马丁!没问题@IlyaS.:)非常感谢你的解释,马丁!没问题@IlyaS.:)