代码如下:
function foo(){
console.log('foo')
return function bar() {
console.log('bar')
}
}
var bar = foo()
即定义一个函数,内部返回另一个函数。
然后用bar保存了内部函数。
问题是:在这种情况下,函数foo是否会被回收?
若bar引用了foo中定义的变量,会导致foo不会被回收,但此情况下,会有区别吗?
当前理解是,foo会被回收,但鉴于此问题,不是很好测试,也不知道怎么去测试,故想咨询各位大佬,确定下这个问题的答案,谢谢。
如有错误麻烦指出,谢谢
使用最新版 chrome 浏览器运行:
const reg = new FinalizationRegistry((val) => {
console.log(val)
})
function foo(){
console.log('foo')
return function bar() {
console.log('bar')
}
}
;(() => {
var bar1 = foo()
reg.register(bar1, 'bar1 被回收了')
})()
var bar2 = foo()
reg.register(bar2, 'bar2 被回收了')
需要等好一会。