let aaa = 1
function wait(message) {
let a = 1
// setTimeout
return function () {
console.log(a);
}
}
let closure = wait()
closure()
如上代码所示,变量aaa和变量closure。因为closure执行会引用wait函数的变量a,所以造成wait无法被回收。但是整个程序没有运行完之前谁也不知道closure会不会再被调用,那wait岂不是要等到程序运行完之后才会被回收。同理,变量aaa岂不也是要等到程序执行完才能被回收,因为程序没执行完之前也不知道aaa会不会被引用到。感觉这块有点迷了。
回答过类似的问题:https://segmentfault.com/q/10...
现代浏览器引擎对闭包 GC 这种问题是有优化的,会不会内存泄漏要看 Profiling 结果,以前那种对着代码就能分析的日子已经一去不复返了。