<script type="text/javascript">
function make_counter(){
count = 0;
function inc_count(){
count = count + 1;
return count;
}
return inc_count;
}
c1 = make_counter();
c2 = make_counter();
alert(c1());
alert(c2());
</script> 为什么这段代码中的C1,与C2输出不一样呢? 希望从栈,临时变量,闭包的角度去解释。
谢谢 。
改成 var count = 0; 就一样了
楼上各位说的是正确的,可是为什么会这样呢? 如何理解这个问题呢?
在函数中定义变量时,没写 var 则是全局变量。function make_counter() {
count = 0;//当第一次调用时,count变成值为0的全局变量 function inc_count() {
count = count + 1;
return count;
} return inc_count;
}c1 = make_counter();//第一次调用后全局变量count值增1为1,
c2 = make_counter();//第二次调用全局变量count值增1为2
alert(c1());
alert(c2());//代码相当于:
var count = 0;//全局变量
function make_counter() {
function inc_count() {
count = count + 1;
return count;
} return inc_count;
}c1 = make_counter();//第一次调用后全局变量count值增1为1,
c2 = make_counter();//第二次调用全局变量count值增1为2
alert(c1());
alert(c2());//如果要值不变应该改成:
function make_counter() {
var count = 0;//局部变量
function inc_count() {
count = count + 1;
return count;
} return inc_count;
}c1 = make_counter();//第一次调用后局部变量count值增1为1,
c2 = make_counter();//第二次调用后局部变量count值增1为1
alert(c1());
alert(c2());
原来不加var就是全局的,