![](/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.