gpt4 book ai didi

javascript - 在全局范围内使用 "let"创建的变量与在循环内使用 "var"创建的变量

转载 作者:行者123 更新时间:2023-11-29 15:09:43 24 4
gpt4 key购买 nike

我正在尝试获得一些有关 JavaScript 中变量声明的经验。在下面的代码中,每当我尝试使用 var 关键字在循环内定义变量时,它都会抛出一个错误:

"Uncaught SyntaxError: Identifier 'i' has already been declared".

而如果我使用“let”关键字(或根本不使用关键字)则没有问题。我知道在我不使用任何关键字的情况下,JavaScript 在全局范围内使用相同的变量并覆盖它。我也知道用“let”关键字创建的变量被认为是 block 作用域,而在函数外部用“var”关键字创建的变量被认为是全局的。但我不明白这种行为!如果有人能对此事有所启发,我将不胜感激。

这段代码:

let i = 78;
console.log(i);
for (var i = 0; i < 4; i++) {
console.log(i);
var insideloop = 100;
}

console.log(i);给出此错误:未捕获的语法错误:标识符“i”已被声明

但是这个没有问题并给出以下输出:

let i = 78;
console.log(i);
for (let i = 0; i < 4; i++) {
console.log(i);
var insideloop = 100;
}
console.log(i);

结果:7801个2个3个78

最佳答案

在全局范围内的任何 block 内用 var 声明的变量不是该 block 的局部变量(在您的例子中是 for 循环的 block )但它们在全局范围内范围。

因此,在您的第一个示例中,您尝试重新声明变量 i,该变量之前已在全局范围内使用 let 声明。

for(var i =0;i<5;i++){}
console.log(i); //i is in global scope

如果 let 在您的案例中的任何 block 中声明,则仅限于 for 循环 block 。它不存在于外面。

for(let i =0;i<5;i++){}
console.log(i); //i is in global scope

关于javascript - 在全局范围内使用 "let"创建的变量与在循环内使用 "var"创建的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com