var age=100;
function box(){
age++;
}
box();//age=101
box();//age=102
function box(){
var age=100;
age++;
return age;
}
box();//age=101;
box();//age=101
为什么全局变量初始化过后,调用函数会累加?而局部变量每次调用变量都会初始化一次?
他们这个过程中发生了什么呢?是因为储存方式,内存的原因??
var age=100;
function box(){
age++;
}
box();//age=101
box();//age=102
function box(){
var age=100;
age++;
return age;
}
box();//age=101;
box();//age=101
为什么全局变量初始化过后,调用函数会累加?而局部变量每次调用变量都会初始化一次?
他们这个过程中发生了什么呢?是因为储存方式,内存的原因??
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
第一个例子中的
age
在全局中声明,即全局变量,所以age
一直存在,每次调用box()
时会根据作用域链找到全局作用域中的age
,所以会一直累加;第二个例子中的
age
在box中声明,即局部变量,age
在box
调用时创建,调用完box()
即被销毁,下次再调用box
时会创建一个新的age
,调用完再销毁,所以无法实现累加,如果想实现的话,可以使用闭包
,创建闭包之后对私有变量处于引用状态,不会销毁,存在内存中,可以实现累加。学习Javascript闭包(Closure)