JavaScript變數提升及範圍

來源:互聯網
上載者:User

標籤:對話方塊   為什麼   asc   範圍   彈出對話方塊   前端   console   ima   ons   

今天在知乎看前端面試題的時候,看到這樣的問題,發現自己懂的真的是太少了,看了給的例子,所以寫一下自己的理解。

首先放一段代碼:

var v= “hello JavaScript”;alert(v);

  很明顯,這樣的是會彈出對話方塊;

將alert(v)寫到一個函數中:

var v= “hello JavaScript”;function test(){  alert(v);      };test();

  這樣彈出的結果肯定也是和第一個一樣;那麼下面這種方式輸出的結果是什嗎?

var bar=1;function test(){  console.log(bar);       var bar=2;   console.log(bar);  }test();

  第一個console會列印undefined,第二個列印2;

這就涉及到了變數提升,同時也涉及了JavaScript的範圍的問題,JavaScript中瀏覽器解析變數的時候,會先在test()函數中進行變數的解析,console.log(bar);輸出時瀏覽器在test()函數中尋找變數bar,但是因為在它的後面才定義了bar變數,,所以變數提升,瀏覽器把定義的變數放到了前面,但是為什麼不應該是2呢?

再看下面的代碼:

function(){  var a=‘one‘;  var b=‘two‘;    }

  這個函數中用了這種定義變數並同時賦值的方式,其實相當於:

function(){     var a,b;         a=‘one‘;     b=‘two‘;    }

  這也就是為什麼輸出的不是2了,var bar = 2;就相當於先定義了var bar;之後又給bar=2,但是bar的變數提升所以在執行console.log(bar);的時候會是undefined;後面的那個輸出就不說了,很明顯是正常輸出2;

這也是涉及了範圍的問題,瀏覽器尋找變數是層層向上尋找,像下面這個例子:

var t=4;function test(){       var Oitem=12;      funciton bar(){       var Titem=34;       console.log(t+" "+Oitem+" "+Titem);      }}

  輸出的時候,bar()函數中對t變數進行尋找,首先在bar函數的範圍中進行尋找,但是在bar函數中沒有定義t變數,所以又會進行上一層的函數中尋找,即對test()函數中進行尋找,但是依然沒有找到,所以會繼續進行再上一層的尋找,在window的範圍中找到了。

 

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.