关于闭包内存泄漏的小问题

        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会不会被引用到。感觉这块有点迷了。

阅读 1.8k
1 个回答

回答过类似的问题:https://segmentfault.com/q/10...

现代浏览器引擎对闭包 GC 这种问题是有优化的,会不会内存泄漏要看 Profiling 结果,以前那种对着代码就能分析的日子已经一去不复返了。

推荐问题