Javascript 如何理解';让';在';对于';陈述
据我所知,“let”用于声明块变量。但它不能用同一个名称声明两次。例如:Javascript 如何理解';让';在';对于';陈述,javascript,scope,ecmascript-5,Javascript,Scope,Ecmascript 5,据我所知,“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 //
'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
“严格使用”;
for(设i=0;i<3;i++){
setTimeout(函数(){
控制台日志(i);
});
}
//输出:
// 0
// 1
// 2
解释器是否静默地更改变量名?任何信息将不胜感激
我不认为这是一个重复的问题。因为我真的想问的是两种理论之间的冲突。
让
将变量的范围限定到它所在的块。
将作用域分配给a
后,不能覆盖它。所以第二次使用let时,它无法处理
正确的用法是:
'use strict';
let a = 1;
a = 2;
在for循环中,我只在开始时声明,在每次迭代中它都会更改它的值 let用于指定您将再次在其中写入值的变量 在第一个示例中,您定义了名为“a”的变量,因此无法定义另一个同名变量,但可以更改它的值,这在for循环中发生
'use strict';
let a = 1;
let a = 2; // syntax error
'use strict';
let a = 1;
var a = 2; this will overwrite...
这里您已经指定了一个值。。您的意图是,它不应该在运行时更改。因此,一旦在块中以相同的类型声明,您就无法更改它
这就是为什么你会犯这个错误
let
is值的意图不应改变
在循环中,
它将在迭代时分开。。所以它在运行时打印值。因此它不会覆盖它…允许创建一次变量,但变量的值可以更改, 示例-
let t =5//
let t = 6 // throws an errow but
t =7
console.log(t) - gives 7
在第一个示例中,变量
a
在同一范围内定义了两次。这会给您一个错误,因为变量已经存在let
不允许这样做,使用var重新声明会这样做。这是使用let
的一个优点
var a=3;
var a=2;
console.log(a);//2.
设b=3;
设b=2//语法错误
设c=3;
var c=2//循环中还有一个语法错误
,变量没有再次声明,但只增加了它的值。
它类似于以下内容:
'use strict';
let i = 0;
i = i + 1;
考虑反复迭代代码,直到条件失败。for(让i=0;i<3;i++){
//代码
}
步骤:
设i=0
checkout问题不在于第一个代码块,而在于它在for循环中是如何工作的。第一个代码是OP,表示他理解let
是如何工作的。他在for
循环中请求let
。我认为没有重复。我想知道这两个原则之间的冲突。你可以试着运行你的代码来了解它是如何工作的。这不是真的。如中所述,每次迭代i
都会得到一个新的绑定。@Ivar您的权利,将立即更改它