概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解:闭包(Closure)=内层函数+外层函数的变量
function outer() {
const a = 1
function f() {
console.log(a)
}
f()
}
outer()
闭包作用:封闭数据,实现数据私有,外部也可以访问函数内部的变量
基本格式:
function outer() {
let i = 1
function fn() {
console.log(i)
}
return fn
}
const fun = outer()
fun()
或简写为:
function outer() {
let i = 1
return function () {
console.log(i)
}
}
const fun = outer()
fun()
闭包应用:实现数据的私有,防止数据被别人在外部篡改
比如,我们要做个统计函数调用次数,函数调用一次,就++
function count() {
let i = 0
return function () {
i++
console.log(`函数被调用了${i}次`)
}
}
const fun = count()
fun()
但是闭包会有内存泄漏的问题