JS全局變量與局部變量的坑

先吐槽一下,js中var變量的作用域問題太鬼畜,特別是對於之前寫Java,C++的人來說。

<script type="text/javascript">  
 var a = "Hello";  
 function test(){  
      alert(a);  
      var a = "World";  
      alert(a);  
 }  
</script>  

上面代碼你以爲輸出什麼?
可能你覺得,不就是全局變量跟局部變量作用域嘛。局部變量作用域會覆蓋全局變量的作用域。所以輸出是:
Hello
World
但這是Java/C++思維。

運行結果是:
undefined
World

爲啥?因爲我只知道1,忘記了2
神坑

  1. 如果局部和全局變量重名,優先使用局部變量
  2. var和function聲明的變量都聲明提前,賦值留在原地。 聲明提前!聲明提前!聲明提前!

上面中已經出現重名的變量,一個是全局,一個是局部(在函數test中),又因爲局部變量a是用var聲明的,因此作用域提前,故第一個alert(a)輸出是undefined。
神坑神坑,以後能用let就用let吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章