一、基础概念
inner
函数就是一个闭包,它可以访问outer
函数作用域中的num
变量,即使outer
函数已经执行完毕。二、相关优势
privateVar
和privateFunc
只能在闭包内部访问,外部无法直接获取或修改,保证了数据的封装性。三、类型(从内存角度看闭包相关情况)
inner
对num
就是强引用。四、应用场景
index
的值,以便在点击事件触发时正确输出对应的按钮编号。startTimer
函数中的message
变量。五、内存问题及解决方法
largeArray
被闭包引用,如果leakFunc
一直存在(比如被全局变量引用),largeArray
就不能被垃圾回收。null
,这样垃圾回收机制就可以回收它所引用的外部变量。null
,这样垃圾回收机制就可以回收它所引用的外部变量。let
代替var
来限制变量的作用域范围,减少闭包对外部不必要变量的引用。例如,在循环中使用let
声明循环变量,避免闭包意外捕获到错误的变量值并长时间占用内存。