闭包
当一个函数的返回值是另一个函数,而返回的那个函数调用了其父函数的内部变量,切返回的那个函数在外部被执行,就产生了闭包
举个例子:
function fun(){
let a = 100;
return function(){
cosole.log(a)
}
}
let fn = fun()
let a = 200
fn()//100
//传一个函数作为参数
function fun(){
let a = 200
console.log(a)
}
let a = 100
function fn(){
console.log(a)
}
fun(fn)//100
优点:
1.避免全局变量的污染
2.变量长期存储的内存中
3.私有成员的存在
缺点:
1.使用不当会造成内存泄漏
如果闭包使用不当,就会导致变量不会被垃圾回收机制回收,造成内存泄露
2.不能及时释放内存
3.捕获的变量是引用,不是复制
4.父函数每调用一次就会产生一次闭包