有时只在Firefox中出现"过多的递归"错误?

Ear*_*rlz 13 javascript recursion firefox

我有一个非常简单的事情,我正在使用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();
});
Run Code Online (Sandbox Code Playgroud)

(是的,我知道有更好的方法可以做到这一点.虽然这很难改变,特别是因为没有显示的ASP.Net部分回发).

无论如何,当发生过多的递归错误时,它会继续发生,直到我重新启动Firefox.当我重新启动Firefox时,它一切正常.我该如何解决?

我也做了一个jsbin例子

更新

好的,我已经找到了如何在我们的代码中可靠地重现它,但它不适用于jsbin示例.如果我创建一个新选项卡并转到同一页面(有两个相同地址的选项卡),然后刷新第一个选项卡两次,那么我会始终如一地得到此错误.我们没有使用任何类型的会话或其他任何我能想到的可能会导致这样的问题只出现在一个标签中!

更新2 不如我想象的那么可靠,但它肯定只在同一页面的多个选项卡打开时才会发生.它会在其中一个选项卡的每次重新加载时打开

我还更新了我的代码,以便在pageLoad(if语句)最初未定义时以及最初定义时显示警报.不知何故,这两个警报都出现了.此代码在呈现的页面中不重复,并且无法再调用它两次.它位于顶级脚本元素中,不被函数或任何东西包围!我的代码最终看起来像

if(pageLoad===undefined){ 
  var pageLoad=function(){}; 
  alert('new'); 
} else {  
  alert('old'); 
}
Run Code Online (Sandbox Code Playgroud)

小智 7

有问题的代码 - 本身 - 永远不会导致无限递归问题 - 没有函数语句,并且所有函数对象都被急切地分配给变量.(如果pageload是第一个未定义的,它将被分配一个无操作功能,请参阅下一节.)

我怀疑还有其他代码/事件触发了这种行为.可能导致它的一件事是,如果在页面生命周期内脚本/代码被触发两次.第二次pageload不会是未定义的并且将保留原始值,如果它是调用其他两个函数的函数,将导致无限递归.

我建议清理方法 - 并且由于并发症引起的任何问题都会消失;-)期望的意图是什么?

快乐的编码.