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

标签 javascript global-variables var local-variables shadowing

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

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

var person = "Jim";

function whosGotTheFunc() {
   person = "Andrew";
}

person = "Nick";
whosGotTheFunc();
console.log(person);

在第二个示例中,代码的第 4 行创建了一个单独的局部变量,也名为 person

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”)。

我想知道的是在这两个例子中,为什么第 7 行的行为有所不同:person =“Nick”???

最佳答案

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

关于Javascript Shadowing - 如果您尝试使用 VAR 关键字更改已存在的全局变量,则会产生影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19395548/

相关文章:

javascript - Canvas 上的图像阻止 Canvas 对象移动

javascript - this.props 不是父组件和子组件之间的函数

javascript - 创建一个 JavaScript 查找,将用户输入与大量项目列表进行比较

c# - JavaScript 到 C# 的转换 - 未知数据类型

python - 使所有变量成为全局变量

css - 更少的 css 变量可能性/限制/语法使用

javascript - Hubot 启动时自动加载 .env

javascript - 返回对象属性在 JavaScript 中如何工作?

lisp - 在 lisp 中列出当前绑定(bind)的全局变量

c - 如何在linux内核中定义全局变量?