我正在尝试获取有关JavaScript中变量声明的经验。 在以下代码中,每当我尝试使用var关键字在循环内定义变量时,都会抛出错误:
“未捕获的SyntaxError:标识符'i'已经被声明”。
而如果我使用“ let”关键字(或完全不使用关键字),则没有问题。 我知道在不使用任何关键字的情况下,JavaScript在全局范围内使用相同的变量并将其覆盖。 我也知道用“ let”关键字创建的变量被认为是块作用域,而用“ var”关键字在函数外部创建的变量被认为是全局变量。但我不了解这种行为! 如果有人能对此事有所启发,我将不胜感激。
此代码:
let i = 78;
console.log(i);
for (var i = 0; i < 4; i++) {
console.log(i);
var insideloop = 100;
}
console.log(i); 给出此错误:未捕获的SyntaxError:标识符'i'已经被声明
但是这个没有问题,并给出以下输出:
let i = 78;
console.log(i);
for (let i = 0; i < 4; i++) {
console.log(i);
var insideloop = 100;
}
console.log(i);
结果: 78 0 1个 2 3 78
答案 0 :(得分:1)
在全局范围内的任何块内用var
声明的变量不是该块的局部变量(在您的情况下,它是for
循环的块),但它们在全局范围内。
因此,在您的第一个示例中,您尝试重新声明变量i
,该变量之前已经在全局范围内使用let
声明过。
for(var i =0;i<5;i++){}
console.log(i); //i is in global scope
如果在您的情况下在任何块中声明为let
,则它仅限于for循环块。它不在外面。
for(let i =0;i<5;i++){}
console.log(i); //i is in global scope