过去我一直认为闭包中只保存被访问的变量。
function a(){
var d=5;d=d+1;
var b=1;
function c(){
console.log(b);
console.log(d);
return b++;
}
return c;
};
var e=a();
e();
e();
e();
调试后发现结果输出
1,6,2,6,3,6
这表示啥?var d每次调用在a()时,都是从5开始,即没有被访问或者外部调用的变量在闭包中不保存。
NO!这就是我之前的想法。
function a(){
var d=5;
var b=1;
function c(){
console.log(b);
console.log(d);
d++;
return b++;
}
return c;
};
var e=a();
e();
e();
e();
进入chrome单步调试,发现,闭包不会重新执行,只会根据返回值调用c函数,从第一个e()开始,进入c()。右侧的变量值仍然变化。
所以闭包中的所有变量都被保存。(只是一家之言)