这是我的另一个问题的延续:Why does this function take up a lot of memory overtime
然而几个小时前我意识到我的实际代码(不是以下代码)占用了与以下代码相同的内存量,a.length
大于 400万在我的实际代码中,经过12个小时的运行,然后就崩溃了。
var a = [];
(function loop(){
a.push([{}, {}, {}, {}, {}, {}, {}, {}, {}]);
if(a.length > 4e6) clearTimeout(call);
call = setTimeout(loop);
})();
正如您所看到的,我在clearTimeout(call);
的长度大于 400万之后致电a
。为什么当a.length > 1000000
我运行的空白标签时上面的代码在内存中大约需要1,000,000k +。
P.S:
答案 0 :(得分:1)
clearTimeout
无效。 call
将保留最后一次setTimeout
调用的ID,即当前正在执行的loop
运行。清除它不会做任何事情,您将在每种情况下安排新的loop
运行。你需要做
var call = setTimeout(loop);
if (a.length >= 4e6) clearTimeout(call);
但最好采用标准
var a = [];
(function loop(){
a.push([{}, {}, {}, {}, {}, {}, {}, {}, {}]);
if (a.length < 4e6)
setTimeout(loop);
})();
答案 1 :(得分:0)
if(a.length > 4e6) clearTimeout(call);
call = setTimeout(loop);
这绝对没有。
if(a.length <= 4e6) call = setTimeout(loop);
这将是终止循环的行。