跳到主要内容

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

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

  • 函数作为参数被传递
  • 函数作为返回值被返回
// 函数作为返回值
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