闭包
一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解:闭包 = 内层函数 + 外层函数的变量
先看个简单的代码:
<script>
function outer() {
let a = 10
function fn() {
console.log(a)
}
fn()
}
outer()
</script>
闭包作用
封装数据,提供操作,外部也可以访问函数内部的变量
闭包的基本格式:
- 基本写法
<script>
function outer() {
let a = 10
function fn() {
console.log(a)
}
// fn()
return fn
}
// outer() === fn === function fn() {}
const fun = outer()
fun() // 调用函数 打印10
</script>
- 简约写法
<script>
function outer() {
let a = 10
return function {
console.log(a)
}
}
const fun = outer()
fun() // 调用函数 打印10
</script>
闭包的应用
实现数据的私有
比如:我们要做个统计函数调用次数,函数调用一次,就++
<script>
let i = 0
function fn() {
i++
console.log(i)
}
</script>
但是,上面这个 i, 是个全局变量,很容易被修改,修改成下面这样就实现了数据私有,无法直接修改 i
<script>
function count() {
let i = 0
function fn() {
i++
console.log(i)
}
return fn
}
const fun = count()
</script>