javascript的函數範圍及聲明提前

來源:互聯網
上載者:User

標籤:js範圍

廢話不說;先來段代碼;

var scope=‘global‘;function test(){    alert(scope);        // 輸出undefine;而不是global    var scope=‘local‘;      alert(scope);        // 輸出local}test();

腦算下;你可能會認為第一alert會輸出global;

但是事實上第一個alert輸出的是undefined;

這是怎麼回事呢?

要探討這個問題首先要解釋下兩個概念;

1:函數範圍:

    函數範圍指的是函數內聲明的變數只在此函數內有效;

2:聲明提前:

    聲明提前的意思是說在函數內任何位置聲明的變數都會提前至函數最上邊首先解析;


理解聲明提前的概念後也就是說上面這段代碼等價於如下;

如果從字面上沒能理解這個聲明提前;那麼從代碼中就容易懂了;

var scope=‘global‘;function test(){    var scope;           // 先聲明了此變數    alert(scope);        // 因為還未賦值;所以是undefine    scope=‘local‘;       // 賦值    alert(scope);        // 輸出local}test();

那麼引申出來的經驗也就是說在函數體內首先把要用到的變數都在函數開始就聲明;

而不是說用到的時候才聲明變數;

至於為什麼第一個alert不是輸出global;

因為函數體內的局部變數是會遮蓋全域變數的;

想必不用過多解釋;

650) this.width=650;" alt="白俊遙部落格" src="http://www.baijunyao.com/Upload/image/ueditor/20151126/1448548721566957.png" title="白俊遙部落格" />




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.