先吐槽一下,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
神坑
- 如果局部和全局變量重名,優先使用局部變量
- var和function聲明的變量都聲明提前,賦值留在原地。 聲明提前!聲明提前!聲明提前!
上面中已經出現重名的變量,一個是全局,一個是局部(在函數test中),又因爲局部變量a是用var聲明的,因此作用域提前,故第一個alert(a)輸出是undefined。
神坑神坑,以後能用let就用let吧。