看到一段代码。疑问在注释里
- JScript code
if (true) { var a = 1; } alert(a);//为什么这里的a是1?上面定义的a不是大括号里的局部变量吗?
------解决方案--------------------
a的作用域在if之外的函数体全部范围内。像 C++ 这样的语言有“块范围”,任何一对“{}”都定义新的范围。但JScript不支持块范围。如果写成:
- JScript code
<script> function func(){ if (true) { var a = 1; } } alert(a); </script> 就会发现alert(a);无法正常输出a了
------解决方案--------------------
对啊,JavaScript变量没有块范围,只要在方法中定义,无论是在switch块中还是if块中,他们的作用范围都是整个函数。而除此之外,就是全局变量了。
------解决方案--------------------
if,for 都没有独立作用域
------解决方案--------------------
js中虽然没有块状作用域,但是可以模仿
例如(function() {
if (true) {
var a = 1;
}
}
})();
alert(a);