这只是一个问题,在MDN或stackoverflow中搜索时未找到答案。这两个语句
for (let item of array)
和for (item of array)
似乎完全一样。它们是否等效(即,如果变量 item 之前没有任何内容,则用let
隐式声明)吗?
编辑:
这类似于this-不同之处在于,它专门询问for..of循环,而处理let
关键字的答案在底部,因此可能会被遗漏。但是,这两个问题都是关于同一概念的。要点如下:
var
声明,则对于声明的函数是局部的。 let
声明,则仅在for块本地。答案 0 :(得分:3)
如果您不在循环中使用let或var,则在全局范围内创建一个变量
var
仅在函数中保持定义
let
仅在循环语句中保持定义
const arr = ["One","Two","Three"]
function test1() {
for (var a of arr) console.log(a);
console.log("var a after loop:",a) // works
}
function test2() {
for (let b of arr) console.log(b);
console.log("trying to log `let b` after loop")
try {
console.log("let b after loop:",b); // fails
}
catch(e) { console.log("Error:",e.message)}
}
function test3() {
for (c of arr) console.log(c);
console.log("'global' c after loop:",c) //works
}
test1();
test2();
test3();
// fails
console.log("Trying to log var a after function")
try { console.log("var a after function:",a);}
catch(e) { console.log("Error:",e.message)}
console.log("Trying to log let b after function")
try { console.log("b after function:",b);}
catch(e) { console.log("Error:",e.message)}
console.log("'global' c after function:",c); // logs
答案 1 :(得分:0)
它们在功能上是等效的。但这不是一个好习惯。
确保使用let
或var
,因为如果您的代码变大,它将防止您得到怪异的bug或问题,就像使用item
创建或引用全局变量一样。这是一颗定时炸弹