![](/img/trans.png)
[英]What's the difference between a global variable and a 'window.variable' in JavaScript?
[英]will declaring window.variable in a function make the value global?
好吧,那么让我说我有一个全局变量myVar
,并且在一个函数myFunction()
,我写了myVar = 2;
。 通常,这将使myVar
在函数内等于2
。 我的问题是,在函数中声明window.myVar = 2
将使myVar
等于2
全局 (因此,函数外的alert(myVar)
返回2
)?
首先快速回顾一下全局变量:
使用var
或let
声明的全局变量的行为方式不同。 使用var
定义的全局变量使用无法删除的变量名称创建全局对象的不可配置属性。
var x = "var x"; console.log("window.x: " + window.x); console.log( JSON.stringify(Object.getOwnPropertyDescriptor(window, "x")))
但是使用let
声明的全局变量不会成为全局对象的属性。 如果你有一个window
属性(在浏览器中)和一个同名的let
变量,你必须用window.
限定window属性window.
访问它:
let y = "let y"; window.y = "window.y"; console.log("y = " + y + "( using the identifier only)"); console.log("window.y = " + window.y);
现在回到这个问题,
如果在全局范围内声明myVar
并在函数内引用它,则将访问全局变量, 前提是您尚未在函数或任何外部嵌套函数中重新声明该变量。 如果没有重新编译,这种访问既可用于读取也可用于写入,并且在函数内执行myVar = 2
将更新全局变量的值。
在函数内执行window.myVar = 2
只会更新全局myVar
变量的值(如果使用var
声明它)。 它可能会创建一个窗口属性,但不会更新全局let
变量的值。
因此调用函数后在警报中显示的myVar
值取决于
myVar
,结合使用 myVar
最初是使用var
还是let
声明的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.