闭包
- 概念 : 内部函数包含外部函数的引用,并将其存在内部函数中
- 产生原因 :
1.函数嵌套
2.内部函数引用外部函数的变量
3.外部函数被调用 - 闭包何时产生 : 当内部函数被定义时
- 闭包何时销毁 :
1.内部函数未曾被调用
2.内部函数为垃圾对象时,即被null赋值 - 闭包的作用
1.延长局部变量的生命周期
若未产生闭包,一个函数运行完毕时,内部的变量就会成为垃圾,会被js引擎自动回收,但若该函数有内部函数并调用了这个函数内部的某个变量时,就产生了闭包,该变量就与这个闭包函数共生
以上有一点需要注意,若该闭包函数时作为外部函数的返回值,则需在使用完毕后,将该闭包函数变成垃圾对象,即将其指向null,否则会造成内存泄露,此举过多很容易就造成内存溢出,故不切勿随意使用闭包
2.读写外部函数的局部变量,此处需记住只能修改引用类型的值
function test() {
var a = 1;
var obj = {
name: "zh"
}
return function () {
// debugger;
console.log(obj.name);
return obj;
};
}
var fn = test();
var obj = fn(); //zh
obj.name = "zzzzzzz";
fn(); //zzzzzzz
- 闭包的缺点
1.长时间拥有局部变量,且不释放
2.使用过多容易引起内存问题