上一题下一题

闭包为什么能访问外层函数变量,以及在定时器和事件监听中为什么可能导致内存无法释放

进阶版
来源:bytedance初级工程师
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

闭包能访问外层函数变量,核心原因是 JavaScript 函数在创建时,会保存它所在的词法作用域,也就是函数内部有一个类似 [[Environment]] 的引用,指向创建它时的外部作用域。

比如:

正常来说,outer 执行完后它的执行上下文会出栈,但因为返回的 inner 函数还在外部被引用,而 inner 创建时引用了 outer 的词法环境,所以 outer 里面的变量 name 不会被回收。只要 inner 还可达,这个闭包引用的外层变量也会继续存在。

在定时器和事件监听里容易出现内存无法释放,也是因为回调函数本身通常是一个闭包。

比如定时器:

```js function start() { const bigData = new Array(1000000).fil

登录后查看完整内容