闭包
一、函数回顾
闭包 是我们函数的一种高级使用方式,在聊闭包之前我们要先回顾一下 函数
函数的两个阶段
- 定义阶段
- 调用阶段
二、函数执行空间
三、不销毁的函数执行空间
四、了解闭包
闭包形成后
- 生成一个不会被销毁的函数执行空间
- 内部函数叫做外部函数的闭包函数
五、闭包概念(熟记)
- 有一个A函数,在A函数内部返回一个B函数
- 在B函数内部,访问A函数内部的私有变量
- 在A函数外部,有一个变量引用返回的B函数
六、闭包三种写法
1.显示写法
function A(){
let num = 100
//1.A函数内部返回一个B函数
return function B(){
//2.B函数内部,访问A函数私有变量
console.log(num)
}
}
//3.变量f引用返回的B函数
let f = A()
2.隐式写法
let B //3.在A函数外部,有一个变量引用返回的B函数
function A(){
let num = 200
//1.A函数内部返回一个B函数(隐式)
B = function(){
console.log(num) //2.B函数内部,访问A函数私有变量
}
}
3.自调用函数
let x = (function(){
let num = 300
return function B(){
console.log(num)
}
})
七、闭包的特点
- 作用域空间不销毁
- 优点:因为不销毁,变量不会销毁,增加了变量的生命周期
- 因为不销毁,会一直占用内存,多了以后就会导致内存溢出
- 可以利用闭包,在一个函数外部,访问函数内部的变量
- 优点:可以在函数外部访问内部数据
- 缺点:必须要时刻保持引用,导致函数执行栈不被销毁
- 保护私有变量
- 优点:可以把一些变量放在函数里面,不会污染全局
- 缺点:要利用闭包函数才能访问,不是很方便
八、闭包的应用
点赞功能
设计模式