学习笔记,如有欠缺的地方望大家指点
什么是闭包?
我理解的闭包:闭包就是一个可以读取其余函数内部变量的函数。
没有闭包的函数
function fun(){
var a = 10;
}
console.log(a);//not a defined
总所周知,一般情况下,在函数外部是拿不到函数内部的变量的,那如果我们需要内部变量怎么办?
function fun(){
var a = 10;
return a;
}
通过返回值,我确实可以拿到变量 a 的值,那如果我想拿每次 a 自加的值呢,每当我调用一次就 +1 ,通过返回值肯定是做不到的,函数在调用结束的时候,内部所有产生的变量都会被垃圾机制回收。
闭包函数
function fun(){
var a = 10;
return function fun1(){
return a;
}
}
var fun2 = fun();
console.log(fun2());//10
上面这个代码看上去与直接返回 a 这个变量没什么区别,但是我们确实在函数外部读取到了函数内部的值
写一个稍微复杂的例子
function fun(){
var a = 10;
function add(){
a++;
console.log(a);
}
return add;
}
var f = fun();
f();//11
f();//12
我们实现了通过外部去操作内部的值,并且内部的值并没有被回收,而是进行了保留
闭包的优缺点
闭包的优点
- 可以通过函数外部访问到内部的值
- 可以保存函数内部的值
- 私有变量可以让我们的代码更安全
闭包的缺点
- 保留的值不会回收销毁,会占用内存空间