“太多的递归”jquery错误

时间:2010-03-11 01:32:46

标签: jquery recursion

尝试创建背景图片幻灯片并收到此错误...这是我正在尝试实现的代码:

var $j = jQuery.noConflict();
$j( function(){
    var bgArr = [ 'sample1.jpg','sample2.jpg','sample3.jpg' ];
    function backgroundSlide(i) {
             $j("#home_sub_banner").css("background-image", "url("+bgArr[i++]+")");
             if (i == bgArr.length) i = 0;
             var st = setTimeout(arguments.callee(i), 1000);
    }
backgroundSlide(0)

});

2 个答案:

答案 0 :(得分:5)

当您撰写arguments.callee(i)时,您正在调用 arguments.callee并将其结果(如果有)传递给setTimeout。这导致无限递归。

您需要传递setTimeout和稍后调用arguments.callee的匿名函数,如下所示:

var me = arguments.callee;
setTimeout(function() { me(i); }, 1000);

答案 1 :(得分:1)

这创建了对backgroundSlide的无限重复方法调用。

为什么不使用setInterval尝试不同的实现呢?

这样的事情:

var bgArr = [ 'sample1.jpg','sample2.jpg','sample3.jpg' ];
var currentBg = 0;
function backgroundSlide() {
         $j("#home_sub_banner").css("background-image", "url("+bgArr[currentBg++]+")");
         if (currentBg == bgArr.length) currentBg = 0;
}
setInterval(backgroundSlide, 1000);

PS:上面的代码没有经过测试,但你会得到它的要点。