JavaScript變數提升樣本

來源:互聯網
上載者:User

標籤: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的值在全域範圍中找到了。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

JavaScript變數提升樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.