为什么80%的码农都做不了架构师?>>>
javascript中的变量的作用域不同于java/c的变量规则。
1、在java/c中,如果有一个全局变量与一个局部变量重名,那么在局部变量的作用域中,局部变量会覆盖掉全局变量的值。当离开局部变量的作用域后,全局变量又会重新起作用。也就是说,当有局部变量存在时,程序中起作用的是局部变量的值。
而局部变量的作用域是:if / for / while ...等代码块的 {} 中,出了 {},局部变量就不存在了。(java中代码块 {}中的内嵌的局部变量不能相同。如:2个for中不能出现相同的 int i 的变量定义。)
public class Test {int i=5;public static void main(String[] args) {Test test = new Test();test.test();//局部变量覆盖全局变量test.test2();//没有局部变量,所以全局变量可以起作用。}//测试局部变量private void test(){int i=10;System.out.println(i);}//测试全局变量private void test2(){System.out.println(i);}
}
2、在javascript中,局部变量的作用域是在 function(){} 中的整个 {} 。只要是在方法中定义的变量,在整个方法中就可以使用,不管变量是定义的function内的任何地方。变量的作用域划分与java/c并不相同。当然,此时的局部变量同样会将方法外的变量覆盖。
<script type="text/javascript">
var i = 0;
function test(){alert(i); // 输出 undefined。因为在方法中已经对i进行了定义,而还没有赋值。for(var i=0; i<3; i++);alert(i); //输出 3 。因为在for中定义的var i是可以在整个方法 test 中起作用的。
}
</script>