为什么这个功能会占用大量的内存

时间:2015-01-07 21:08:25

标签: javascript

我试图理解为什么a之后的这个小函数在about:memory选项卡下达到近200,000,它说devtools的总内存是:1079408k?有谁可以解释为什么?

var a = 0;
(function loop(){
 a++;
 console.count();
 call = setTimeout(loop);
})()

2 个答案:

答案 0 :(得分:6)

评论中有猜测,但没人检查,所以I did it

删除console.count()后,内存会停止增长。你看到的只是控制台的增长:这些线必须存储在某个地方。

答案 1 :(得分:0)

函数本身在循环中无限延续。

call = setTimeout(loop);

再次调用该函数,再次调用该行。没有return语句,因此递归永远不会停止并且无限循环。

正如评论中指出的那样,它不一定是递归的,因为没有堆栈建立。内存正在积累,因为正如破坏所指出的那样

console.count();

导致控制台计算调用函数的次数,并且由于它被无限调用,因此内存很快会被数千行console.count()输出填充。

相关问题