【发布时间】:2011-07-29 21:30:11
【问题描述】:
我正在用 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 example
更新
好的,我已经知道如何在我们的代码中可靠地重现它,但它不适用于 jsbin 示例。如果我创建一个新选项卡并转到同一页面(有两个相同地址的选项卡)然后刷新第一个选项卡 两次 次,那么我会始终收到此错误。我们没有使用任何类型的会话或任何我能想到的可能导致此类问题仅发生在一个选项卡中的东西!
更新 2 不像我想象的那么可靠,但它肯定只在同一页面的多个标签打开时才会发生。每隔几次重新加载打开的选项卡之一就会发生这种情况
我还更新了我的代码,以在 pageLoad(if 语句)最初未定义和最初定义时显示警报。不知何故,两个警报都出现了。此代码不会在呈现的页面中重复,并且不可能被调用两次。它位于顶层脚本元素中,没有被函数或任何东西包围!我的代码最终看起来像
if(pageLoad===undefined){
var pageLoad=function(){};
alert('new');
} else {
alert('old');
}
【问题讨论】:
-
您正在链接到一个 jsbin 页面,同时承认它可能会使他们的 Firefox 崩溃? ;)
-
尝试了 jsbin 页面并重新加载了几次并没有崩溃。我正在使用 Firefox 5.0
-
好吧,看起来 Javascript 解释器通常有 3000 个内联调用的限制。如果不同的浏览器使用不同的解释器,那么这就是为什么您可能只在 Firefox 上看到错误的原因。您能否使用 jsbin 示例重现该错误?
-
你有函数调用自己,或者自己的别名。我不确定我是否理解您为什么对遇到递归错误感到困惑。
-
@Alien 它不会使 firefox 崩溃,它只会在 javascript 错误日志中给出“递归过多”的错误
标签: javascript firefox recursion