闭包触发条件
1.函数作为返回值
2.函数作为参数被传递
为什么要用闭包,闭包的意义是什么?
答:可以代码封装成一个闭包形式,用特定的方法管理私有变量和方法,将变量的变化封装在安全的环境当中。
手写一个闭包
// 1.函数作为返回值
function closure () {
const a = 100
return function () {
console.log(a)
}
}
const fn = closure()
const a = 200
fn() //100
// 2.函数作为参数被传递
function closure (fn) {
const a = 200
fn()
}
let a = 100
function fn () {
console.log(a)
}
closure(fn)
总结: 所有的自由变量的查找是在函数定义的地方,向上级作用域查找,不是在执行的地方!!!
实际开发中闭包的应用
//闭包隐藏数据
function createCache(){
const data = {} //隐藏闭包中的数据不被外界访问
return {
set:function(key,val){
data[key] = val
},
get:function(key){
return data[key]
}
}
}
const c = createCache()
c.set('a',100)
console.log(c.get('a')) //100