1. 程式人生 > >JavaScript變量提升演示樣例

JavaScript變量提升演示樣例

代碼 efi reference cti 全局變量 推斷 sum java fin

直接先看兩段代碼

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

JavaScript變量提升演示樣例