【问题标题】:How to get rid of javascript maximum stack size如何摆脱javascript最大堆栈大小
【发布时间】:2014-03-10 01:16:37
【问题描述】:

我需要这段代码迭代大约 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();

【问题讨论】:

  • 你的问题似乎不清楚!
  • 这里没有“迭代”。你的意思是setInterval() 而不是setTimeout()?如果是这样,那么您将不会遇到任何堆栈大小问题。
  • 对不起,我是 javascript 新手,正在努力学习它。我需要无限期地调用该函数,可能是通过调用 setInterval 并将 myFunc 作为参数和延迟。或者最好用被调用者或其他东西调用它,但不要完全阻塞浏览器!

标签: javascript


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这通常表示设计不佳,但解决方案可能如下:

    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();
    

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

    【讨论】:

    • 感谢 Ilya,它运行良好。不要担心浏览器速度变慢,我没有使用这段代码,我只是在学习!我需要开发一些其他东西,而这些只是我面临的一些问题!
    猜你喜欢
    • 2012-06-26
    • 2020-11-05
    • 2011-11-24
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2013-08-23
    相关资源
    最近更新 更多