是什么
闭包是嵌套的内部函数
是包含被引用变量(函数)的对象(正解)
注意:
闭包存在于嵌套的内部函数中
产生条件
+函数嵌套 +内部函数引用了外部函数的数据(变量/函数) +执行外部函数
- 闭包在内部函数对象中,也就是说得先产生内部函数对象才会有产生闭包的可能;内部函数对象怎么产生:执行函数定义。执行调用外部函数才会执行函数定义,产生内部函数对象。执行函数定义不是执行函数,执行函数需要调用函数
- 也就是说,产生内部函数对象不需要调用内部函数
常见的闭包
1.将函数作为另一个函数的返回值
说明 a 在不断累加,说明局部变量 a 没有消失
a 是个局部变量,什么时候产生:执行 fn1 时产生(即调用 fn1 时产生)。什么时候死亡:调用结束后就死亡。但实际上这个 a 可以不断累加,没有死亡
创建了几个闭包对象实际就是看外部函数调用了几次
2.将函数作为实参传递给另一个函数使用
闭包的作用:
1.使函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期)
2.让函数外部可以操作(读写)到函数内部的数据(变量/函数)
闭包的生命周期:
1.产生:在嵌套内部函数定义执行完时就产生了(不是在调用)
2.死亡:在嵌套的内部函数成为垃圾对象时 执行完函数定义,创建了内部函数对象就产生了。在第15行就可以说闭包已经存在了
闭包的应用_自定义JS模块:
闭包的缺点及解决:
1.缺点
+函数执行完后,函数内的局部变量没有释放,占用内存时间会变长
+容易造成内存泄漏
2.解决
+能不用闭包就不用闭包
+即使释放
- 让内部函数成为垃圾对象,回收闭包