У меня довольно простая вещь, которую я делаю с javascript, и в основном только иногда javascript дает мне ошибку "слишком много рекурсии".
Код, о котором идет речь:
if(pageLoad===undefined){
var pageLoad=function(){};
}
var pageLoad_uniqueid_11=pageLoad;
var pageLoad=function(){
pageLoad_uniqueid_11();
pageLoad_uniqueid_12();
};
var pageLoad_uniqueid_12=function(){
alert('pageLoad');
};
$(document).ready(function(){
pageLoad();
});
(да, я знаю, что есть лучший способ сделать это. Это сложно изменить, особенно из-за частичной обратной передачи ASP.Net, которые не показаны).
В любом случае, когда происходит слишком большая ошибка рекурсии, это продолжается до тех пор, пока я не перезапущу Firefox. когда я перезапускаю Firefox, все работает нормально. Как это исправить?
Я также сделал пример jsbin
Обновление
Хорошо, я узнал, как надежно воспроизвести его в нашем коде, но он не работает для примера jsbin. Если я создаю новую вкладку и перехожу на ту же страницу (имеют две вкладки с одним адресом), а затем обновляю первую вкладку два, тогда я получаю эту ошибку последовательно. Мы не используем какой-либо сеанс или что-то еще, о чем я могу думать, что может вызвать такую проблему только на одной вкладке!
Обновление 2 Не так надежно, как я думал, но это определенно происходит только тогда, когда открыто более одной вкладки одной и той же страницы. Это произойдет каждые несколько перезапуска одной из открываемых вкладок.
Я также обновил свой код, чтобы показать предупреждение, когда pageLoad (оператор if) первоначально undefined и когда он изначально определен. Так или иначе, появляются оба предупреждения. Этот код не дублируется на отображаемой странице, и нет способа, чтобы он вызывался дважды. Это элемент верхнего уровня script, не окруженный функцией или чем-либо еще! Мой код выглядит как
if(pageLoad===undefined){
var pageLoad=function(){};
alert('new');
} else {
alert('old');
}