分类
默认

什么是闭包?闭包会用在哪里?(三座大山之二)

闭包,作用域应用的特殊情况,有两种表现:

  • 函数作为参数被传递
  • 函数作为返回值被返回
// 函数作为返回值
function create() {
    const a = 100
    return function () {
        console.log(a)
    }
}
const fn = create()
const a = 200
fn() //100
//函数作为参数被传递
function print(func) {
    const b = 200
    func()
}
const b = 100
function func() {
    console.log(b)
}
print(func) // 100

闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方查找!!!

实际开发中闭包的应用

  • 隐藏数据,只提供 API
  • 如做一个简单的 cache 工具
// 闭包隐藏数据,只提供API,类似一个简单的cache工具
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