定义:
一个函数和对其周围状态(词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。
其实和高阶函数的定义差不多,常见的闭包:
- 将函数作为另一个函数的返回值
- 将函数作为实参传递给另一个函数调用
闭包的作用:
- 使函数内部的变量在函数执行完后, 仍然存活在内存中(延长了局部变量的生命周期)
- 让函数外部可以操作(读写)到函数内部的数据(变量/函数)
闭包的生命周期:
- 产生: 在嵌套内部函数定义执行完时就产生了(不是在调用)
- 死亡:在嵌套的内部函数成为垃圾对象时。即没有人指向它时死亡,通常置为 null,当然指向其他也行,但不安全(容易污染变量)
闭包的缺点:
函数执行完后, 函数内的局部变量没有释放,占用内存时间会变长,容易造成内存泄露。需要手动释放内存(上面的 f = null),尽量不要用闭包
举例:
点击某个按钮, 提示"点击的是第n个按钮"