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

JS没有"块作用域"
   没别的意思,只是记下来而已,这在犀牛书上是明明白白地写着的。
<script>
for(var i = 0; i < 10; i++){
    var a = i;
}
alert(a);//alert 9,而不是undefined,或报错,a被注册到全局变量里去了
</script>

稍微加深一下
<script>
try{
  alert(abcde);
}catch(e){
  alert(e);
}//报错
try{
  alert(a);
}catch(e){
  alert(e);
}//alert undefined,而不是报错,原因同上
for(var i = 0; i < 10; i++){
    var a = i;
}
</script>

再来1个
<script>
var s=2;
function test(){
   alert(s);//undefined
   var s=1;
   alert(a);//undefined
   if(s===3){
      var a=2;
   }
   alert(a);//undefined
}
test();
alert(s)//2,从全局变量中寻找s
</script>

上例中的test()相当于
function test(){
  var s;
  var a;
  alert(s);
  s=1;
  alert(a);
  if(s===3){
    a=2;
  }
  alert(a);
}