JavaScript学习笔记之闭包
引入
我们先看一个栗子~
1 | <!-- |
理解闭包
1. 如何产生闭包?
- 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时, 就产生了闭包
2. 闭包到底是什么?
使用chrome调试查看(Closure)
理解一: 闭包是嵌套的内部函数(绝大部分人)
理解二: 包含被引用变量(函数)的对象(极少数人)
注意: 闭包存在于嵌套的内部函数中
3. 产生闭包的条件?
函数嵌套
内部函数引用了外部函数的数据(变量/函数)
常见的闭包
1. 将函数作为另一个函数的返回值
1 | // 1. 将函数作为另一个函数的返回值 |
2. 将函数作为实参传递给另一个函数调用
1 | // 2. 将函数作为实参传递给另一个函数调用 |
闭包的作用
使用函数内部的变量在函数执行完后, 仍然存活在内存中(延长了局部变量的生命周期)
让函数外部可以操作(读写)到函数内部的数据(变量/函数)
问题:
函数执行完后, 函数内部声明的局部变量是否还存在?
一般是不存在, 存在于闭中的变量才可能存在在函数外部能直接访问函数内部的局部变量吗?
不能, 但我们可以通过闭包让外部操作它
闭包的生命周期
1. 产生: 在嵌套内部函数定义执行完时就产生了(不是在调用)
2. 死亡: 在嵌套的内部函数成为垃圾对象时
1 | function fn1() { |
闭包的缺点及解决
1. 缺点
函数执行完后, 函数内的局部变量没有释放, 占用内存时间会变长
容易造成内存泄露
2. 解决
能不用闭包就不用
及时释放
1 | function fn1() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Layne666 - Blog!
评论