我有一个事件,它可以自我激发。我尽量使代码尽可能高效,但在某些情况下它可能达到最大调用堆栈,这是我无法控制的。这不是一个无限的堆栈,它会在某个时候结束,但有时它可能会因为限制而结束之前发生崩溃。如何增加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