1. 程式人生 > >JavaScript變數提升示例

JavaScript變數提升示例

直接先看兩段程式碼

        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的值在全域性作用域中找到了。