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.:)