闭包是作用域引申来的。
当一个值赋值给一个变量的时候,因为变量后面会被使用到,所以这个值不会被销毁。

闭包

子函数可以访问到父级函数作用域的数据。

B站学习笔记(闭包)

视频地址:
第九章 这次把JS闭包给你讲得明明白白_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1YJ411R7ap?p=1
image.png
返回的内部函数必须引用外层函数的数据,才能保留,形成闭包
再看这个例子:
image.png
若要m保留数据,则要引用函数show( )
image.png
image.png
闭包,就是函数嵌套,内部函数调用外部函数的变量

let var 在for循环中执行原理

for循环产生了四个定时器,因为是异步任务,放在队列中,同步任务执行完了,此时全局变量i也就是var情况下,输出3个4,let情况下是产生了3个块级作用域互不干扰,所以是123
image.png
image.png
image.png

使用闭包特性的例子

image.png
解释一下filter()函数:参数是一个函数,里面的回调函数要有个形参,就是这里的v,filter会将当前数组的每个元素传入回调函数v。
filter 函数的第一个参数 item 就是数组的每一项,当把 between函数 当作第一个参数传入时 return 出了一个函数 相当于把 item 当作参数执行了,return 返回新的数组