闭包
1.什么是闭包?
闭包就是能够读取其他函数内部变量的函数。通俗来讲就是函数a的内部函数b,被函数a外部的一个变量引用的时候,就创建了一个闭包。
2.什么情况下会用到闭包?
函数封装的时候,或者在使用定时器的时候,会经常用到。
例1:
function f1(){
var n=999;
function f2(){
console.log(n); //控制台输出n变量
}
return f2;
}
var result=f1(); //result=f2
result(); //f2()
例2:
function f1(){
var n=999;
nAdd=function(){n+=1};
function f2(){
//控制台输出n变量
console.log(n);
}
return f2;
}
var result=f1(); //result=f2
result(); //f2()
nAdd();
result();
3.闭包的作用
当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但又不会 “污染” 全局的变量时,就可以用闭包来定义这个模块。
闭包最大的两个作用,一个是它可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
4.闭包的优缺点
优点:
① 减少全局变量;
② 减少传递函数的参数量;
③ 封装;
缺点:
① 使用闭包会占有内存资源,过多的使用闭包会导内存溢出。
5.内存泄漏的解决方法
就是把那些不需要的变量,但是垃圾回收又收不走的的那些赋值为null,然后让垃圾回收走