什么是闭包
简单概括:
一个持有外部环境变量的函数就是闭包。
引用维基百科:
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
也可理解为
作用域的特殊情况,有两种表现:
1.函数作为返回值;
2.函数作为参数
- 函数作为返回值
// 函数作为返回值
function create() {
const a = 100;
return function() {
conosole.log(a)
}
}
const fn = create()
const a = 200
fn() // 100
- 函数作为参数被传递
// 函数作为参数被传递
function print(fn) {
let a = 100
fn()
}
let a = 200
function fn() {
console.log(a)
}
print(fn) // 100
其中,在闭包中所有自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方。
实际开发中闭包的应用场景
隐藏数据,只提供api
function createCache() {
const data = {}
return {
set: function (key, val) {
data[key] = val
}
get: function (key) {
return data[key]
}
}
}
data.b = 200
const c = createCache()
c.set('a',100)
console.log(c.get('a'))