日期:2014-05-16  浏览次数:20298 次

全局变量?为什么?
看到一段代码。疑问在注释里
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);