看几个case:
-------------------------------1. -------------------------------
<script>
var name = 1;
function test1() {
alert(name);
var name = 2;
alert(name);
for(var i=0; i<10; i++) {
var j = 100;
}
alert(i);
alert(j);
}
</script>
alert依次出现:undefined, 2, 10, 100
JS变量的作用范围是function级别,与Java明显不同的是,Java有block级别的变量命名空间,比如for循环中的变量出了循环之后不能再使用,但是JS不同,所有定义在同一个function(暂不说嵌套function的情况)中的变量,会覆盖外部的同名变量,而无论是在本function的哪一行声明它,如果在声明它之前访问它,其值就是unfined
-------------------------------2. -------------------------------
<script>
var name = 1;
function test() {
var name = 2;
return function() {
alert(name);
}
};
var name = 3;
var f = test();
f();
</script>
alert的结果为2,这个是典型的闭包问题
-------------------------------3. -------------------------------
var a = 1;function test1() {
alert(a);
}
function test2() {
var a = 2;
alert(a);
}
test2();