我有一個事件,它可以自我激發。我儘量使代碼儘可能高效,但在某些情況下它可能達到最大調用堆棧,這是我無法控制的。這不是一個無限的堆棧,它會在某個時候結束,但有時它可能會因爲限制而結束之前發生崩潰。如何增加Javascript中的最大調用堆棧?
我會增加調用堆棧的數量,如果我設置了2個類似的事件偵聽器和分裂的代碼?或者我能做什麼?
UPDATE:它是基於DOM變化事件(只使用Webkit,所以不關心其他瀏覽器),它也可以根據某些條件修改DOM。我還沒有真正達到這個限度,但在理論上,它可能會。我仍在優化代碼,儘可能減少DOM操作。
更新2:我包括樣品(不實)例如:
document.addEventListener('DOMSubtreeModified', function(event){
this.applyPolicy(event);
}, true);
function applyPolicy(event){
if(typeof event != "undefined"){
event.stopPropagation();
event.stopImmediatePropagation();
}
if(!isButtonAllowed){
$('button:not(:disabled)').each(function(){
$(this).attr('disabled', true);
});
}
}
這僅僅是一個示例代碼,但即使在這種情況下,如果你有說按鈕的100S,呼叫堆棧也將在100秒內。請注意,如果您使用$('button').attr('disabled', true);
,這將導致調用堆棧問題,因爲jQuery將試圖無限修改DOM。
也許你應該把你的遞歸函數轉換成while循環嗎?我無法想象你需要實際數百個事件觸發器的副作用來觸發其他功能...... – 2012-03-22 18:29:43
從來沒有達到過這個限制,如果不是在錯誤地編碼一個無限循環時。顯示代碼.. – gpasci 2012-03-22 18:30:05
簡答:沒有(標準)機制來執行此操作。唯一的選擇是改變代碼。 – 2012-03-22 18:30:42