一、什么是闭包?
作用域利用的非凡状况(有两种):
函数作为参数被传递
函数作为参数被返回
1.函数作为参数被传递:
function print(fn){ let a = 200 fn()}let a = 100function fn(){ console.log(a)}print(fn)//100
2.函数作为参数被返回
function create(){ let a = 100 return function(){ console.log(a) }}let fn = create()let a = 200fn()//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的值)