js闭包理解
js闭包其实就是一句话 闭包变量就是函数对象的属性
例1
function f1(){
var n=999;
function f2(){
n++;
alert(n);
}
return f2;
}
var result=f1();
result();
result();
执行结果为 1000和1001,为什么呢?因为js中万物皆对象 f1在被调用时会创建一个函数对象A,n和f2是它的属性,而f2每次被调用时都是访问对象A的属性
例2
function f1(){
var n=999;
function f2(){
n++;
alert(n);
}
return f2;
}
var result=f1();
result();
var result=f1();
result();
执行结果是1000和1000,因为第一次f1被调用时创建了A对象,result获取的是A的f2属性,访问的是A对象的属性,而第二次f1被调用是创建的是B对象,result获取的是B的f2属性,访问的是B对象的属性。