先吐槽一下,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吧。