延续式编程是否容易出现堆栈溢出

时间:2011-02-18 15:04:08

标签: jquery recursion continuations

在回答关于jQuery效果的this question时,我考虑过将callback参数用于.fadeIn( 500, my_function )

虽然原则上这是一个可行的想法,我不知道(并且如果允许回调被提交,则没有jQuery文档:();

function keep_animating(){
   $("#id").fadeIn(500).fadeOut(500, keep_animating );
}

3 个答案:

答案 0 :(得分:3)

您可以添加调试器断点并测试堆栈大小是否增加。 :)

然而,由于动画/ fadings使用setTimeout / setInterval,我高度猜测调用深度不会增加,即它不会出现堆栈溢出。

答案 1 :(得分:1)

我花时间问'people who know'...没有堆栈溢出,因为没有明确的递归:fadeInfadeOut ...方法只需在效果队列中创建一个条目。这意味着keep_animating函数不会在同一个上下文中执行。

礼貌dave methvin

  

你所描述的“递归”   实际上不是递归。 jQuery的   视觉效果在setTimeout上运行   计时器,所以回调函数不是   像它一样立即运行   递归。相反,回调运行   动画完成后   几个“步骤”,每个由一个触发   的setTimeout。

答案 2 :(得分:0)

你的解决方案会递归,并最终炸掉筹码 - 但你会有很长一段时间 - 取决于浏览器 - 直到它。对于快速演示,这很好,但对于生产就绪的代码,您将需要采用非递归方法,例如:

function pulse(){
   $("#id").fadeIn(500).fadeOut(500);
}
setInterval(pulse, 1000);

有很多方法可以让你这么做,但应该让你到那儿。