【发布时间】:2011-06-01 16:26:39
【问题描述】:
编辑:这只是一个简单的例子来证明我对一个更大的程序的担忧。我不会将这个实际代码用于任何事情:)
如果我运行这个 -
<!DOCTYPE html>
<html>
<head>
<script>
function update(amount, win, data)
{
win.innerText = 'Count is ' + amount;
setTimeout(function() { update(amount + 1, win, {data: 'something'})}, 1000);
}
window.onload = function() {
var win = document.getElementById('item');
update(0, win, 0);
}
</script>
</head>
<body>
<div id="item"></div>
</body>
</html>
对 setTimeout 的调用可能会创建一个闭包,该闭包将参数的内容捕获到“更新”函数(数量、获胜、数据)。因此,这些变量会一直保存在内存中,直到调用超时并返回,以便它们在该函数调用中可用...
但是该函数为超时的下一次迭代创建了一个 new 闭包......在第二个闭包中将捕获什么?仅仅是这些变量的新副本还是会在新闭包中再次捕获构成函数调用一部分的那些?
基本上这最终会因为每个闭包中的数据越来越大而耗尽内存,还是这样安全合理?
【问题讨论】:
标签: javascript closures