JavaScript變數提升示例
阿新 • • 發佈:2019-01-09
直接先看兩段程式碼
function getSum() {
var sum = a + b;
var a = 1;
var b = 2;
return sum;
}
getSum();
function getSum() { var sum = a + b; a = 1; b = 2; return sum; } getSum();
大家可以先看一下這兩段程式碼的異同,並判斷一下執行後分別得到的結果。
在執行第一段程式碼時,得到的NaN,這是因為在函式中變數宣告被提升的結果,在執行“sum = a + b”前,先進行了a,b的定義,但由於沒有賦值(賦值不會被提升),所以此時a,b的值均為undefined,最終變為sum = undefined + undefined,然後得到NaN的結果。
在執行第二段程式碼時,得到的卻是“ReferenceError: a is not defined",丟擲一個異常說a未定義。在這裡,函式中的a,b由於沒有通過var定義,而被當成了全域性變數,因此在函式中沒有對a,b的宣告進行提升;而在函式的一開始便執行了”sum = a + b"的操作,在執行這一句時,會沿著作用域量逐級往外找a與b的定義和值,由於在這裡沒有找到相應的定義(全域性作用域也沒有),從而丟擲a未定義異常(其實b也會丟擲未定義異常)。
將第二段程式碼稍作修改,改成下面這樣:
a = b = 3;
function getSum() {
var sum = a + b;
a = 1;
b = 2;
return sum;
}
getSum();
再執行這段程式碼,此時得到的是6,a、b的值在全域性作用域中找到了。