一、什么是闭包?

作用域利用的非凡状况(有两种):
函数作为参数被传递
函数作为参数被返回

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的值)