javascript - setInterval() 导致最大堆栈调用大小超出错误?

标签 javascript jquery

运行下面的代码一段时间后,我收到“超出最大堆栈调用大小”错误。 setInterval()应该能够无缝递归运行,所以我还不确定错误是由它还是代码的其他部分引起的。

function blinkCursor() {
    $("#cursor").animate({opacity: 0}).animate({opacity: 1});
} setInterval(blinkCursor, 600);

这是代码的最后一部分。但我在没有上述部分的情况下对其进行了测试并且没有问题。无论如何,现在我不太确定。

function type() {
    var firstSentence = "Human rights",
        firstSentenceCounter = 0,
        intervalID = setInterval(typeWithDelay, 150);

    function typeWithDelay() {
        $("#text").text(firstSentence.substring(0, firstSentenceCounter++));

        if(firstSentenceCounter == firstSentence.length+1) {
            clearInterval(intervalID);
        }
    }
} setTimeout(type, 1500);

最佳答案

animate() 默认持续时间为 400。

您在动画完成之前很久就不断调用函数,并不断添加到永不停止增长的动画队列中。

400+400 = 800 ...大于当前使用的 600 区间

更好的方法是使用最后一个动画回调来初始化下一轮而不是使用 setInterval

function blinkCursor() {
    $("#cursor").animate({opacity: 0}).animate({opacity: 1}, blinkCursor );
}
blinkCursor(); // initialize once

关于javascript - setInterval() 导致最大堆栈调用大小超出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783267/

相关文章:

javascript - Shopify + Parallax Theme,如何定位主页上的架构元素

javascript - JavaScript console.log/trace 等策略

jQuery 和 XML(带有 CDATA)

javascript - 无法使用 javascript\jquery 禁用选项卡列表中的选项卡

javascript - 如何在 JavaScript 中用随机值填充生成的表

javascript - 在下拉列表中存储值 - Ember.js

javascript - Grunt nunjucks-2-html

javascript - jQuery SlideUp() 和 SlideDown() 函数在奇怪的时间触发

jquery - 将 e.which 插入数组不等于给定数组

javascript - 如何仅在事件选项卡中获取所选选项的属性?