是一种特殊的函数,能够访问函数作用域中的变量()
(1)函数内部变量不能拿到外面使用
(2)闭包的定义: 一个作用域可以访问另外一个函数内部的局部变量,或者说一个函数(子函数)访问另一个函数(父函数)中的变量,此时就会有闭包产生,那么这个变量所在的函数我们就称之为闭包函数。
function fn(){
let num=123//这个值一直在,不会丢
//函数也是值,也是一种数据
return function fn1(){console.log(num)}//闭包函数
}
let re=fn();//此时已经结束了
re()//但是re可以继续访问
①函数也是数据
②不调用就是本身的值,调用了就是里面的代码
闭包的优缺点(主要作用):
- 延伸了变量的作用范围
- 因为闭包函数中的局部变量不会等着闭包函数执行完就销毁,因为还有别的函数使用它,要等到所有函数都调用完他才会销毁
- 闭包会造成内存泄漏(在退出函数之前将不使用的局部变量删除)
- 解决办法:手动释放
✿✿✿注意:
1.闭包会在父函数外部,改变父函数内部的变量的值,所以,如果把父函数当做对象(object)使用,把闭包当做他的公用方法,把内部变量当做他的私有属性,这时要小心,不要随便改变父函数内部的变量。