读书人

关于闭包及变量回收有关问题

发布时间: 2012-08-29 08:40:14 作者: rapoo

关于闭包及变量回收问题

本文的诞生,源自近期打算做的一个关于javascript中的闭包的专题,由于需要解析闭包对垃圾回收的影响,特此针对不同的javascript引擎,做了相关的测试。

为了能从本文中得到需要的知识,看本文前,请明确自己知道闭包的概念,并对垃圾回收的常用算法有一定的了解。

问题的提出

假设有如下的代码:

function outer() {    var largeObject = LargeObject.fromSize('100MB');    return function() {        console.log('inner');    };}var inner = outer();

在这一段代码中,outer函数和inner函数间会形成一个闭包,致使inner函数能够访问到largeObject,但是显然inner并没有访问largeObject,那么在闭包中的largeObject对象是否能被回收呢?

如果引入更复杂的情况:

function outer() {    var largeObject = LargeObject.fromSize('100MB');    var anotherLargeObject = LargeObject.fromSize('100MB');    return function() {        largeObject.work();        console.log('inner');    };}var inner = outer();

首先一个显然的概念是largeObject肯定不能被回收,因为inner确实地需要使用它。但是anotherLargeObject又能不能被回收呢?它将跟随largeObject一起始终存在,还是和largeObject分离,独立地被回收呢?

测试方法

带着这个疑问,对现有的几款现代javascript引擎分别进行了测试,参与测试的有:

读书人网 >Web前端

热点推荐