1.概念:其局部变量在函数调用结束之后继续存在。
2.前提:嵌套函数
3.分析理解嵌套函数:
但是。。。。
函数f在调用的时候生成的Call-f对象的属性g所引用的Function被fn1引用,只要fn1存在,被fn1引用的Function就存在,Call-f对象也就存在。这就导致了即便是离开了f,还是可以引用f中的变量n。<--- 此为闭包
2.前提:嵌套函数
function f(){
function fn1(){};
}
3.分析理解嵌套函数:
function f(){
function g(){
print 'g is a function'
};
g();//生成Call-g对象
}
f();//javascript中对函数的调用会隐式生成Call对象,此处生成Call-f对象,Call-f的属性包括f和g,此对象在函数调用结束后被销毁。Call-f对象被销毁的时候,相关的属性也被销毁。
==>g is a function
但是。。。。
function f(){
var n = 123;
function g(){
console.log('n=' + n);
};
return g;
}
var fn1 = f();
fn1();
函数f在调用的时候生成的Call-f对象的属性g所引用的Function被fn1引用,只要fn1存在,被fn1引用的Function就存在,Call-f对象也就存在。这就导致了即便是离开了f,还是可以引用f中的变量n。<--- 此为闭包