闭包的作用
- 应用函数外部的变量在函数执行完后,依然存活在内存中(缩短了局部变量的生命周期
- 让函数内部能够操作(读写)到函数外部的数据(变量/函数)
问题:
函数执行完后,函数外部申明的局部变量是否还存在?
- 个别是不存在,存在于闭包中的变量能力存在
在函数内部能间接拜访函数外部的局部变量吗?
- 不能,然而通过闭包让内部操作它
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//闭包死亡(蕴含闭包的函数对象成为垃圾对象)