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吧。

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