闭包
作用:
1.延长变量生命周期
2.创建私有环境
let a=1
function fn(){
let b=1
return function(){
return b
}
}
当 fn()执行结束之后,b不会被回收,而是常驻内存,而且保存在一个私有的区域。
例如:在vue的data中就是一个闭包的设计
通过data为每一个组件建立一个私有空间(作用域),以达到a组件的数据与b组件的数据在单页面内互不干扰
建立私有空间保存下来之后,后续如何拿到(操作)?
例如:
既然是私有环境,就不能是随意改变操作的,只能是暴露什么,才能操作什么。
function fn(){
let n=0
function change(val){
n+=val
}
return{
//暴露三个方法
add:function(){
change(1)
},
reduce:function(){
change(-1)
},
value:function(){
return n
}
}
let n1=fn()
let n2=fn()
n1.add() //1
n2.reduce() //-1
console.log(n1.value()) //1
console.log(n2.value()) //-1
通过闭包生成的n,互不影响,拥有各自的词法环境