javascript - 新闻代码 : Recursion Error

标签 javascript jquery recursion settimeout

我试图为我正在创建的网站实现一个简单的新闻行情。 作为 JS 和 JQuery 的新手,我从网站上获取了代码。该代码工作得很好,但是当我转移函数调用时,会发生太多递归(firefox)错误。 原函数:

$(document).ready(function(){
var tick=function()
{
    window.setTimeout(function()
    {
        $('#ticker li:first').animate({marginTop:"-30px"},700,function()
        {
            $(this).detach().appendTo('#ticker').removeAttr('style');
        });
        tick();//Old position for function call- works fine
    },4000);
};
tick();
});

上面的代码有效,但是当我将递归调用转移到 setTimeout 函数之外时,会出现递归错误。稍微修改一下代码:

$(document).ready(function(){
var tick=function()
{
    window.setTimeout(function()
    {
        $('#ticker li:first').animate({marginTop:"-30px"},700,function()
        {
            $(this).detach().appendTo('#ticker').removeAttr('style');
        });

    },4000);
         tick();//New position for function call-leads to unresponsive page
};
tick();
});

我的问题是:上面的代码不应该以完全相同的方式工作吗?当位置改变时,什么会发生变化?

最佳答案

the setTimeout function的目的是设置另一个函数在指定的时间后运行。但是,超时运行不会阻止其他代码执行 - setTimeout 函数仅设置超时,它会立即执行,而不是等待传递给它的函数实际运行。当您在 setTimeout 函数调用中调用 tick() 且超时时间为 4000 毫秒时,您将获得重新运行 tick() 的效果> 每四秒一次。但是,一旦您将其移出 setTimeout 调用,它就会在您第一次调用它时立即无限地重新运行。

关于javascript - 新闻代码 : Recursion Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742876/

相关文章:

JavaScript - parseInt 在不同浏览器中不一致

javascript - 发送后如何在 OPEN 就绪状态下保持 websocket 连接?

javascript - '引用错误 : jest is not defined' when running unit test

Javascript 获取嵌套元素值

html - CSS Float 水平溢出

java - 递归方法查找矩阵中的路径数

javascript - 选择 - 编辑帖子时填充

javascript - Bootstrap 4 工具提示未居中

javascript - Jquery rpg游戏逻辑并将数据推送到html

java - 递归的 StackOverflowError