定义:闭包就是里层函数+外层函数变量,它们一起构成了闭包
作用:因为函数内部的变量只能自己访问,我们使用闭包就是为了在外部访问函数内部的变量
//里层函数用到了外层函数的变量function outer() {const a = 1function f() {console.log(a)}f()}outer()
应用场景:统计函数的调用次数(实现数据私有)
count作为全局变量容易被修改→将它改成闭包形式→使count,私有→外部无法直接修改
造成问题:内存泄露。
原因:fun是全局变量(未关闭不回收),而fun的内容是outer函数的返回值fn函数,而fn引用了外部函数count的变量count,从而造成了count,一直在内存中,不会被释放。
//闭包的应用:统计函数调用的次数
//1.普通形式 :
// let count = 1//因为count是全局变量,很容易被修改,会影响内部count值
// function fn() {
// count++//函数调用一次,打印一次→但如果在外层修改count=1000,则下次打印结果为1001
// console.log(`函数被调用${count}次`)
// }// 2.闭包形式
function outer() {let count = 1function fn() {count++console.log(`函数被调用${count}次`)//外部改变count,打印不受影响;1,2...}return fn
}
//outer() === fn === function fn() {}
//const fun = function fn() {}
const fun = outer()//outer()
// fun === fn()
fun()
fun()
// const fn = function() { } 函数表达式