2016-7-30 闭包
闭包
- 函数内部再定义一个函数,由此函数来使用函数(父)的局部变量
使用场景,比如这个局部变量的值要一直使用,则这是一个很好的保存该值的方法
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
- 以上的f2函数就是一个闭包
- var result = f1(); 实质就是调用f2()
- 第一次result()结束之后,f1()函数并没有被回收,所以才会产生第二次result()的结果
-
f1没有被回收的原因是:
1)f2函数在f1函数内部(f2依赖f1)
2)f2被赋值给了全局变量
- nAdd也是匿名函数也是一个闭包
原理
function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();