说起闭包,真是个恼人的小妖精啊。
你还不能不会不能不用,来来来,干干脆脆的来个大总结。
什么是闭包呢?
闭包是是指有权访问另一个函数作用域中的变量的函数。
本质上,闭包是将函数内部和函数外部连接起来打的桥梁。
创建闭包的常见方式是什么?
最常见的创建闭包的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。利用闭包可以突破作用域链,将函数内部的变量传递到外部。
闭包的特点是什么呢?
1、函数套函数;
2、内部函数可以引用外部函数的参数和变量;
3、参数和变量不会被垃圾回收机制收回。
闭包的优点是什么呢?
1、可以将一个变量长期驻扎在内存当中;
2、避免全局变量的污染;
3、私有成员的存在。
使用闭包需要注意什么呢?
1、闭包会使函数中的变量被保存在内存中,内存消耗很大,会造成网页性能问题,在IE中会导致内存泄漏;
解决办法:在退出函数之前,将不使用的变量全部设置为空,可以释放内存。
2、闭包会在父函数外部,改变父函数内部变量的值。所以如果把父函数当做对象Object使用,把闭包当做它的公用方法,把内部变量当做它的私有属性,一定要小心,不要随便改变父函数内部变量的值。
最后,来个闭包的代码练练手吧。
function F1(){
let a = 100;
return function f2(){ // 闭包的特点:1. 函数套函数
console.log(a) // 2. 内部函数可以引用外部变量
}
}
let f1 = F1();
let a = 200 ; // 重新定义变量来看看调用时走哪个
f1(); // 100 函数调用时的变量是创建时候的变量而不是调用时的变量
网友评论