如何摆脱javascript最大堆栈大小

时间:2014-03-09 16:34:10

标签: javascript

我需要这段代码迭代大约10秒(或无限期更好),而不会导致javascript最大堆栈大小。我已经注释了setInterval,因为它导致了问题!

var myToggle = false;

function myFunc () {

    setTimeout(function () {

        if (myToggle) {
            console.log("red");
        }
        else {
            console.log("yellow");
        }

        myToggle = !myToggle;

    }, 500);
    // setInterval(myFunc, 10000);
}

myFunc();

2 个答案:

答案 0 :(得分:1)

改为调用setInterval。 setTimeout将调用内部函数一次。 setInterval将继续调用,直到您取消。

答案 1 :(得分:0)

这通常是设计不良的标志,但解决方案可能如下:

var myToggle = false;

function myFunc () {
    var startTime = new Date()/1;
    function wait () {
        if (myToggle) {
            console.log("red");
        } else {
            console.log("yellow");
        }
        myToggle = !myToggle;
        if (new Date() < startTime + (10*1000)) { // exit condition
            setTimeout(wait, 500);
        }
    }
    wait();
}

myFunc();

仅供参考:除其他外,无限回调会降低浏览器的速度并消耗移动设备上的电量。