You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS闭包中调用inst()后,innerVal是否会被GC回收?

闭包中innerVal是否会被垃圾回收?

以下是我编写的闭包函数:

function closure() {let innerVal; return function() {innerVal = innerVal+10}}
let inst = closure();
inst();
console.log('end');

请问调用inst()后,innerVal会被垃圾回收(GC)清除吗?


回答:

调用inst()之后,innerVal不会被垃圾回收,核心原因如下:

  • 变量inst始终持有对closure()返回的内部函数的引用,而这个内部函数形成了闭包,会持续保留对closure()函数作用域的引用,innerVal就存在于这个作用域中。
  • 只要inst变量没有被显式销毁(比如赋值为null)或者未脱离当前生效的作用域,闭包绑定的作用域就不会被垃圾回收机制标记为可回收,innerVal自然也会留在内存中。
  • 哪怕只调用一次inst(),只要inst还存在,闭包作用域就会被持续保留,此时innerVal的值为NaN(因为初始未赋值的innerVal是undefined,执行undefined + 10得到NaN),该值会一直存在于内存里。

内容的提问来源于stack exchange,提问作者Bad Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:55:56