Javascript Shadowing - 如果您尝试使用 VAR 关键字更改不存在的全局变量,则会产生效果

Javascript Shadowing - Effect if you try to change an already existing global variable w/o using the VAR keyword

本文关键字:全局变量 不存在 如果 Shadowing 关键字 VAR Javascript      更新时间:2023-09-26

所以,我知道声明一个没有var关键字的变量意味着它是在全局范围内声明的。

因此,在下面的第一个示例中,代码的第 4 行将全局变量 person(前面没有 var 关键字)从"Jim"更改为"Andrew"。

var person = "Jim";
function whosGotTheFunc() {
   person = "Andrew";
}
person = "Nick";
whosGotTheFunc();
console.log(person);

在第二个示例中,代码的第 4 行创建了一个单独的局部变量,也是授权的人

var person = "Jim";
function whosGotTheFunc() {
   var person = "Andrew";
}
person = "Nick";
whosGotTheFunc();
console.log(person);

但是,这两个示例的第 7 行有什么作用?那行说: 人="尼克";

树屋测验询问记录到控制台的内容。在示例 #1 中,第 4 行将全局变量 person 更改为"Andrew",但随后第 7 行不会影响该全局变量(因此控制台记录"Andrew")...但是,在示例 #2 中,在第 4 行创建局部变量后,第 7 行实际上确实将全局变量的值从"Jim"更改为"Nick"(控制台记录"Nick")。

我想知道的是,在 2 个示例中,为什么第 7 行的行为差异:人 = "尼克???

变量在两个示例中都进行了修改。但是,对 whosGotTheFunc() 的调用是在全局修改之后进行的,因此在第一个例子中,它覆盖了"Nick"的值,将其保留在"Andrew"处。