簡體   English   中英

為什么我的全局變量在本地聲明之前被遮蔽了?

[英]Why is my global variable shadowed before the local declaration?

x = 1; 
alert(x); 
var y = function() { 
    alert(x); 
    var x = 2; 
    alert(x); 
} 
y(); 

3個警報的結果是: 1undefined2 (Chrome 25)

我的問題是:為什么第二個警報未定義? 為什么不是1? 是不是有全局變量x?

由於吊裝 ,這是執行的:

x = 1; 
alert(x); 
var y = function() { 
    var x; // <-- this gets hoisted up from where it was.

    alert(x); 
    x = 2; 
    alert(x); 
} 
y();

在函數y()的開頭,聲明了局部變量x但未初始化。

函數中的變量聲明被提升到頂部。 所以它在技術上看起來像這樣:

var y = function() {
    var x;

    alert(x);

    x = 2;
};

局部變量掩蓋了全局變量。 這就是警報返回undefined

因為JavaScript中的范圍是一個函數對象。 當您在函數(代碼示例)中執行某些代碼時,“alert(x)”將查找函數中是否存在“x”的任何定義。 所以,這個函數中有一個“var x = 2”。 但是JavaScript運行時會像這樣解釋你的代碼:

x = 1; 
alert(x); 
var y = function() { 
  var x;
  alert(x); 
  x = 2; 
  alert(x); 
} 
y(); 

因此,第二個警報中的x是“未定義”而不是“1”。 因此,當您在函數中聲明某個變量時,我建議您在函數頂部聲明變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM