据我所知,'let'用于声明块变量。但它不能用同名声明两次。例如:
'use strict';
let a = 1;
let a = 2; // syntax error
那么如何使用相同的变量名将'for'迭代中的每个范围分开?
'use strict';
for(let i = 0; i < 3; i++){
setTimeout(function(){
console.log(i);
});
}
// output:
// 0
// 1
// 2
剂量解释器默默地更改变量名称?任何信息将不胜感激。
我认为这不是一个重复的问题。因为我真的想问的是两种理论之间的冲突。
答案 0 :(得分:1)
在for循环中,i仅在开始时声明,并且在每次迭代中它都会更改它的值。
let用于变量,你将再次写入值。
在第一个示例中,您定义了名为“a”的变量,因此您无法定义具有相同名称的另一个变量,但您可以更改它在for循环中发生的值。
答案 1 :(得分:0)
let
将您的变量范围限定在它所在的块中。
将范围指定给a
后,您无法覆盖它。所以第二次使用let时,它无法处理。
正确使用将是:
'use strict';
let a = 1;
a = 2;
答案 2 :(得分:0)
'use strict';
let a = 1;
let a = 2; // syntax error
'use strict';
let a = 1;
var a = 2; this will overwrite...
这里你已经指定了一个值..你的意图是,它不应该在运行时改变。所以你不能在块中声明相同类型let
..
为什么会出现此错误..
let
的意图是价值不应该改变..
它将在iterate上分开..所以它在运行时打印值。所以它不会覆盖它......
答案 3 :(得分:0)
在第一个示例中,变量a
在同一范围内定义了两次。这会给您一个错误,因为该变量已经存在。 let
不允许这样做,使用var
重新声明。这是使用let
的一个优点。
var a = 3;
var a = 2;
console.log(a); // 2
let b = 3;
let b = 2; //syntax error
let c = 3;
var c = 2; //also a syntax error
在for循环中,i
变量具有不同的范围。这两个i
变量的含义不是相同。
let i = "my string";
console.log(i); //my string
for(let i = 1; i <= 3; ++i){
console.log(i); //1, 2, 3
}
console.log(i); //my string
javascript运行时不关心您的变量是否相同。它将区分范围,从而区分变量。它正在将对i
的引用替换为for循环中的新变量,其值为4。
我在Stackoverflow上的here上有一个答案,它描述了Android编译器如何不关心你的变量名。它在这里是相同的,运行时使用不同的“名称”(不同的内存地址)。
答案 4 :(得分:0)
在循环中,变量不会再次声明,只会增加其值。 它类似于以下内容:
'use strict';
let i = 0;
i = i + 1;
考虑一遍又一遍地迭代代码,直到条件失败。
答案 5 :(得分:0)
for(let i = 0; i < 3; i++){
// code
}
步骤:
let i = 0
结帐i<3
exec code
i++
,等于i = i + 1
//不会发生错误,而let i = i + 1
会发生异常
循环步骤-2直到i<3 == false