如何产生闭包?
当一个内部函数引用了外部函数的变量时,就产生了闭包
function fn1(){
var a = 2
var b = 'abc'
function fn2(){
console.log(a)
}
}
fn1()
闭包到底是什么?
使用chrome调试查看
理解一:闭包是嵌套的内部函数(绝大部分理解)
理解二:包含被引用变量的对象(极少数人)
闭包产生的条件
函数嵌套。内部函数引用了外部函数的变量
常见的闭包
·将函数作为另一个函数的返回值
function fn1(){
let a = 2
function fn2(){
a++
console.log(a)
}
return fn2
}
var f = fn1()
f() //3
f() //4
·将函数作为实参传递给另一个函数调用
闭包的作用
1,使用外部函数内部的变量在函数执行完成后,仍然存活在内存中(延长了局部变量的生命周期)
2,让函数外部能直接访问函数内部的局部变量
上面代码通过调用f()就能操作函数的变量
闭包的缺点及解决
缺点:1,函数执行完后,函数内部的局部变量没有被释放
2,容易造成内存泄露
解决:1,能不用就不用 2,及时释放即让内部函数=null