什么是闭包?
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
上面代码中的f2函数,就是闭包
我的理解是: 闭包就是能够读取其他函数内部变量的函数。
在本质上:闭包是将函数内部和函数外部连接起来的桥梁。
闭包的用途
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。
function f1() {
var n = 1;
add = function () { n += 1 }
function f2() {
console.log(n);
}
return f2;
}
var a = f1();
a();
add();
a();
其中,两次a执行后结果是
这证明函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
闭包的优缺点
优点
- 局部作用域
- 减少全局变量污染
缺点
- 由于闭包会使一些变量一直保存在内存中不会自动释放,所以如果大量使用的话会消耗大量内存,在IE9之前闭包会导致内存泄漏