javascript Hoisting變數提升

來源:互聯網
上載者:User

標籤:div   lib   sdn   mod   return   title   key   tle   details   

1. 看人家舉的兩個例子,我認為這裡的判斷是否定義: !var 其實就是 指是否在函數function裡面定義了。只有在funciton裡面定義了了,js才hoist到最上面去找這個變數的值,否則就按照你自己在函數裡定義的規則來了。

[轉載請註明來自: http://blog.csdn.NET/sunxing007]

下面的程式是什麼結果?

[javascript] view plain copy 
  1. var foo = 1;  
  2. function bar() {  
  3.     if (!foo) {  
  4.         var foo = 10;  
  5.     }  
  6.     alert(foo);  
  7. }  
  8. bar();  

結果是10;

 

那麼下面這個呢?

[javascript] view plain copy 
  1. var a = 1;  
  2. function b() {  
  3.     a = 10;  
  4.     return;  
  5.     function a() {}  
  6. }  
  7. b();  
  8. alert(a);  

結果是1.

再看下面這個例子,感覺就是只有在funtion裡面才會發生上面的變數提升?單純的if 可沒用

  1. var x = 1;  
  2. console.log(x); // 1  
  3. if (true) {  
  4.     var x = 2;  
  5.     console.log(x); // 2  
  6. }  
  7. console.log(x); // 2  

結果會是1 2 2。因為javascript是函數範圍。這是和c家族語言最大的不同。該程式裡面的if並不會建立新的範圍。

 

對於很多C,c++,Java程式員來說,這不是他們期望和歡迎的。幸運的是,基於javascript函數的靈活性,這裡有可變通的地方。如果你必須建立臨時的範圍,可以像下面這樣:

javascript Hoisting變數提升

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.