javascript – Firefox中有一个“太多的递归”错误?

前端之家收集整理的这篇文章主要介绍了javascript – Firefox中有一个“太多的递归”错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的事情,我在使用 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 example

更新

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

更新2
不如我想象的那样可靠,但它绝对只有当同一页面的多个选项卡打开时才会发生.每打开一个标签的每一个重新加载就会发生

当pageLoad(if语句)最初未定义并且最初定义时,我还更新了我的代码显示警报.不知怎的,两个警报都显示出来.这个代码在渲染的页面中不重复,没有办法被调用两次.它是一个顶级的脚本元素,不被函数或任何东西包围!我的代码最终看起来像

if(pageLoad===undefined){ 
  var pageLoad=function(){}; 
  alert('new'); 
} else {  
  alert('old'); 
}

解决方法

所涉及的代码本身不应该导致无限递归问题 – 没有函数语句,并且所有的函数对象被迫切地分配给变量. (如果pageload是第一个未定义的,将被分配一个No-Operation功能,请参见下一节.)

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

我建议清理这种方法 – 并发症引起的并发症就会消失; – )什么是期望的意图?

快乐编码.

猜你在找的JavaScript相关文章