[英]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個警報的結果是: 1
, undefined
, 2
(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.