1.什么是闭包?
一个函数和词法环境的引用捆绑在一起,这样的组合就是闭包(closure)
一般就是一个函数A,return其内部的函数B,被return出去的B函数能够在外部访问A函数内部的变量,这时候就形成了一个B函数的变量背包,
A函数执行结束后这个变量背包也不会被销毁,并且这个变量背包在A函数外部只能通过B函数访问
例子:
function A(){
var a = 10;
return function(){ //内部函数B
alert(a);
}
}
var b = A();
b(); //能够打印A函数中的a=10
2.形成闭包的原理
作用域链,当前作用域可以访问上级作用域中的变量
3.闭包解决的问题
能够让函数作用域中的变量在函数执行结束之后不被销毁,同时也能在函数外部可以访问函数内部的局部变量。
4.闭包带来的问题
由于垃圾回收器不会将闭包中变量销毁,于是就造成了内存泄露,内存泄露积累多了就容易导致内存溢出
5. 闭包的应用
能够模仿块级作用域,能够实现柯里化,在构造函数中定义特权方法、Vue中数据响应式Observer中使用闭包等。