一、什么是闭包?
作用域利用的非凡状况(有两种):
函数作为参数被传递
函数作为参数被返回
1. 函数作为参数被传递:
function print(fn){
let a = 200
fn()}
let a = 100
function fn(){console.log(a)
}
print(fn)
//100
2. 函数作为参数被返回
function create(){
let a = 100
return function(){console.log(a)
}
}
let fn = create()
let a = 200
fn()
//100
3. 自在变量
什么是自在变量?
以后作用域没有定义然而应用了,须要咱们去沿着作用域链查找的变量。
自在变量的查找规定?
在函数 定义
的中央,向下级作用域查找,而不是执行的中央!!!
二、理论开发过程中闭包的利用
比方暗藏数据(做一个简略的 cache 工具)
function createCache(){let data = {} // 闭包中的数据,被暗藏,不被外界拜访
return {set(val, key){data[val] = key
},
get(key){return data[key]
}
}
}
let c = createCache()
c.set('a', 100)
console.log(c.get('a'))
//100(这样就只能通过 c.get 和 c.set 来拜访和设置 data, 而不能再函数外随便批改和获取 data 的值)