概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解:闭包(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()
但是闭包会有内存泄漏的问题