现在的位置: 首页 > 综合 > 正文

IE,FF下JS闭包的资源释放差异

2013年12月10日 ⁄ 综合 ⁄ 共 579字 ⁄ 字号 评论关闭

做了一个简单测试验证js 闭包对资源占用情况,代码如下:

function justFN(){
	var str = "1M string here";
	window.setTimeout(function(){
		debugger;//此处为断点
		var s = str;//此处对str对象进行引用
	},2000);
}
justFN();

然后分别在Firefox 和 IE9中运行,使用调试工具,当运行到断点时,查看闭包相关信息如下:

Firefox:

IE9:

之后修改代码,去掉回调函数中对str变量的引用,代码如下:

function justFN(){
	var str = "1M string here";
	window.setTimeout(function(){
		debugger;
	},2000);
}
justFN();

再次查看闭包相关信息如下:

Firefox:

IE9:

由此可以得出结论:

对于闭包的处理机制IE9 和Firefox是不一样的,差别在于:IE9中,无论上下文中的变量是否被闭包引用,都会被存储在闭包中,所占用的资源不会被释放,直到回调函数运行结束;而firefox中,只有被闭包引用的变量才会被存储在闭包中,也就是有选择性的存储变量,没有被引用的对象将会被自动回收(Chrome测试结果同Firefox)。

所以我们在使用异步操作进行函数回调时,一定要注意到IE9的这个特性,以减少不必要的内存占用。

抱歉!评论已关闭.