爲了響應關於jQuery效果的this question,我想到了使用callback
參數到.fadeIn(500, my_function)
。是繼續式編程容易堆棧溢出
雖然原則上,這是一個可行的想法,我不知道(既不擁有jQuery的文檔:()如果回調允許遞歸:
function keep_animating(){
$("#id").fadeIn(500).fadeOut(500, keep_animating);
}
爲了響應關於jQuery效果的this question,我想到了使用callback
參數到.fadeIn(500, my_function)
。是繼續式編程容易堆棧溢出
雖然原則上,這是一個可行的想法,我不知道(既不擁有jQuery的文檔:()如果回調允許遞歸:
function keep_animating(){
$("#id").fadeIn(500).fadeOut(500, keep_animating);
}
你可以添加一個調試器斷點,測試堆棧大小是否增加:)
但是,由於動畫/衰落使用setTimeout/setInterval我高度猜測調用深度不會增加,即它不容易發生堆棧溢出。
您的解決方案將緩解並最終將堆棧炸燬 - 但您將有相當長的時間 - 取決於瀏覽器 - 直到它出現爲止。對於一個快速演示,這是好的,但對於生產準備代碼,你會想利用非遞歸方法,如:
function pulse(){
$("#id").fadeIn(500).fadeOut(500);
}
setInterval(pulse, 1000);
有很多方法對皮膚這一點,但應該讓你那裏。
我花時間詢問'people who know'......沒有堆棧溢出,因爲沒有明確的遞歸:fadeIn
,fadeOut
...方法都只是在效果隊列上創建一個條目。這意味着keep_animating
函數不是從相同的上下文中執行的。
禮貌dave methvin:
你所描述的 「遞歸」 什麼是不實際的遞歸。 jQuery的 視覺效果運行在setTimeout 定時器上,所以回調函數不是 ,因爲它會在 遞歸中立即運行。取而代之的是,回調在 動畫在 完成後運行 幾個「步驟」,每個「步驟」都由 setTimeout觸發。
從我在源文件中可以看到的情況來看,它會執行遞歸操作。查看[速度函數](http://www.keyframesandcode.com/resources/javascript/deconstructed/jquery/#speed),它最終處理所有效果的回調函數。它使用`call()`直接執行回調,不涉及隊列。 – Tomalak 2011-02-18 15:17:03