我有以下代碼:JavaScript變量名稱相同的使用功能名稱
function a(x) {
return x * 2;
}
var a;
alert(a);
爲什麼警報顯示
function a(x) {
return x * 2
}
????如果我把var a = 4
,警報顯示4 但是像這樣a
將被識別爲函數
爲什麼會發生這種情況?
我有以下代碼:JavaScript變量名稱相同的使用功能名稱
function a(x) {
return x * 2;
}
var a;
alert(a);
爲什麼警報顯示
function a(x) {
return x * 2
}
????如果我把var a = 4
,警報顯示4 但是像這樣a
將被識別爲函數
爲什麼會發生這種情況?
功能是類型對象這是一種值。
值可以存儲在變量(和屬性,並作爲參數傳遞給函數等)。
函數聲明:
一個var
聲明:
您的聲明和var
聲明均被吊銷。其中只有一個爲變量a
賦值。
如果使用函數名稱作爲變量名稱,則其值由函數體替換。所以「var a」變成你的功能「a」,因此你的警報顯示功能「a」。
在JavaScript兩者函數聲明和變量聲明被提升到函數的頂部,如果在功能或全局上下文的頂部限定,如果函數之外。函數聲明優先於變量聲明(但不能超過變量賦值)。
函數聲明覆蓋變量聲明升起時
首先聲明一個變量:
var a; // value of a is undefined
二,a
的值是一個函數,因爲函數聲明優先於變量聲明(但不在變量分配中):
function a(x) {
return x * 2;
}
這就是你在撥打alert(a);
時所得到的結果。
但是,如果不是聲明變量,而是進行變量賦值:var a = 4;
比賦值4
優先。
你應該還記得var a
懸掛,這使得它更喜歡這個
var a; // placed
function a(x) {
return x * 2;
};
var a; // removed
alert (a); // a is replaced by function body
記住var a
懸掛,因此,如果您分配4 to a
:
var a; // placed
function a(x) {
return x * 2;
};
var a = 4; // removed
a = 4 // added
alert (a); // a is now 4
你期望什麼?變量和函數在JavaScript中共享相同的名稱空間,因此它們互相覆蓋。 – Sirko
@Sirko我希望a未定義 – joesid
如果函數名稱和變量名稱相同,那麼JS引擎將忽略該變量。 –