什么是闭包
闭包是一个可以访问外部作用域的内部函数,即使这个外部作用域已经执行结束
闭包是指那些能够访问自由变量的函数。 自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量
以上2种说法都可以,看自己理解,示例:
function log(fn) {
const a = 200
fn()
}
const a = 301
function fn() {
console.log(a)
}
log(fn) // 301
闭包的使用场景
防抖,节流,自定义缓存,隐藏数据(设置私有属性),只提供API(接口参数隐藏)
function createCache() {
const data = {} // 闭包中被隐藏的数据,不被外界访问
return {
set: function (key, val) {
if (!key) return null
data[key] = val
},
get: function (key) {
if (!key) return null
return data[key]
}
}
}
const cache = createCache()
cache.set('a', 100)
console.log(cache.get('a')) // 100
(待补充防抖和节流函数)