闭包的作用
- 应用函数外部的变量在函数执行完后,依然存活在内存中(缩短了局部变量的生命周期
- 让函数内部能够操作(读写)到函数外部的数据(变量 / 函数)
问题:
-
函数执行完后,函数外部申明的局部变量是否还存在?
- 个别是不存在,存在于闭包中的变量能力存在
-
在函数内部能间接拜访函数外部的局部变量吗?
- 不能,然而通过闭包让内部操作它
function fn1(){
var a = 2
function fn2(){
a++
console.log(a)
}
function fn3(){
a--
console.log(a)
}
return fn3
}
var f = fn1()
fn1()
f()//1
f()//0
闭包的生命周期
- 产生:在嵌套外部函数定义执行完时就产生(不是在调用)
- 死亡:在嵌套的外部函数变为垃圾对象时.
function fn1(){
// 此时闭包就曾经产生了(函数晋升,外部函数对象以及创立了)var a = 2
function fn2(){
a++
console.log(a)
}
return fn2
}
var f = fn1()
f()//3
f()//4
f = null// 闭包死亡(蕴含闭包的函数对象成为垃圾对象)