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

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

回复
阅读 382
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏