有时候,我们需要得到函数内部的局部变量,但是前面讲到,正常情况下,这是办不到的,这个时候就用到了闭包。
**闭包就是能够读取其他函数内部变量的函数。**创建闭包的常见方式,就是在一个函数内部创建另一个函数。
实例1:
var a = 10;
function f1(){
var b = 1000;
function f2(){
console.log(b);
}
return f2;
}
var f2 = f1();
f2()
在上面的代码中,函数f2被包括在函数f1内部,所以,函数f2可以读取到函数f1中的局部变量。此时f2作为一个函数,成为返回值,那么f2就叫做闭包。
闭包的用处:
1.可以读取函数内部的变量;
2.让这些变量保存在内存中。
但是闭包也会产生很多难易解决的问题,比如:
function f1(){
var n = 999;
nAdd = function(){
n+=1;
}
function f2(){
alert(n);
}
return f2;
}
var f2 = f1();
f2();
nAdd();
f2();
如上,函数f1和f2始终在内存中,不会被垃圾回收机制回收。
故闭包的缺点有:
1. 使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包;
2. 闭包会在福函数外部,改变父函数内部的值,但是在使用的时候一定要小心。