У меня есть событие, которое может загореться само. Я стараюсь сделать код как можно более эффективным, но в некоторых случаях, которые я не могу контролировать, он может достигать максимального стека вызовов. Это не бесконечный стек, и в какой-то момент он закончится, но иногда он может аварийно завершиться до завершения из-за ограничения.
Увеличу ли я количество стека вызовов, если настрою 2 одинаковых прослушивателя событий и разделю код? Или что я могу сделать?
ОБНОВЛЕНИЕ: это событие изменения 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);
});
}
}
Это всего лишь пример кода, но даже в этом случае, если у вас есть, скажем, 100 кнопок, стек вызовов будет в 100 тоже. Обратите внимание, что если вы используете $('button').attr('disabled', true);
, это вызовет проблему со стеком вызовов, потому что jQuery будет бесконечно пытаться модифицировать DOM.