什么是闭包?
一般就是一个函数A,return其内部的函数B,被return出去的B函数能够在外部访问A函数内部的变量,这时候就形成了一个B函数的变量背包,A函数执行结束后这个变量背包也不会被销毁,并且这个变量背包在A函数外部只能通过B函数访问
原理
作用域链,当前作用域可以访问上级作用域中的变量
应用点
能够模仿块级作用域,能够实现柯里化,在构造函数中定义特权方法、Vue中数据响应式Observer
简单例子
function a(){
let i = 1
return function b(){
console.log(i)
}
}
var x = a()
x() //1
console.log(x.i) //undefined
优点
避免污染全局变量、让函数作用域中的变量在函数执行结束之后不被销毁,同时也能在函数外部可以访问函数内部的局部变量
缺点
因为垃圾回收器不会将闭包中变量销毁,易内存泄露,导致内存溢出