javascript - jquery递归函数中奇怪的无限循环错误

标签 javascript jquery loops

我正在处理的项目有一个奇怪的问题。这会自动更改图像源和 div 的内容。

我已经编写了一个函数,但是它陷入了无限循环并且页面没有加载(页面始终显示加载页面)。

这些是代码:

$.fn.extend({
    changehaber: function(a){
     $('#cokokunanlarcontent').fadeOut('slow',function() {
           $('.jquerycokokunanlarbutton').attr('src','images/sabah/buton-pasif.png');
           $('img[rel="'+a+'"]').attr('src','images/sabah/buton-aktif.png'); 
        }).html($('#'+a).html()).fadeIn('slow');
        return this;
    }
});

function slidecokokunanlar() {
    $('#cokokunanlarcontent').html($('#cokokunanlar1').html()).delay(3000).changehaber('cokokunanlar2').delay(3000).changehaber('cokokunanlar3').delay(3000).changehaber('cokokunanlar4').delay(3000).changehaber('cokokunanlar5').delay(3000);
    slidecokokunanlar();
}

slidecokokunanlar();

这里有什么问题,执行时,我希望函数无限运行,但页面显示它一直在加载。这是控制台的输出:

Uncaught RangeError: Maximum call stack size exceeded

提前致谢

最佳答案

如果不阻塞整个执行堆栈,则无法从自身内部调用函数。通过从自身内部调用该函数,您可以有效地防止它返回,并且由于 Javascript 是单线程的,所以一切都会停止!

将你的函数改成这样:

function slidecokokunanlar() {
    $('#cokokunanlarcontent').html($('#cokokunanlar1').html()).delay(3000)...
    setTimeout(slidecokokunanlar, 0);
}

这允许在不阻塞 UI 的情况下并发执行,从而使您的页面保持响应。

参见 this article on "chunking"有关其工作原理的更多信息。

关于javascript - jquery递归函数中奇怪的无限循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6507976/

相关文章:

javascript - 检查数组是否具有另一个数组的键值对

javascript - 转换期间的 CSS 转换更改导致当前状态丢失并跳转到开头(Chrome 错误)

javascript - 在按钮提交上显示加载面板的问题

javascript - 远程 css 背景图像未加载

javascript - 如何在禁用 css 时隐藏 div?

javascript - 元素初始化中的 JQuery UI 变量

php - 内容和标题不会显示在 Wordpress 的某些页面上

Java 使用两个循环

Matlab:在循环中更新最大计数不起作用

javascript - 如何使用Data-id发送多个Id