3

我已经实现了这个脚本的一部分来帮助我调试

var ZFDebugLoad = window.onload;
window.onload = function(){
   if (ZFDebugLoad) {
      ZFDebugLoad();
   }
   ZFDebugCollapsed();
};

Firebug 给了我错误“中断错误太多递归”

对我来说,代码看起来像一个无限循环,所以我想知道为什么原作者把它放进去。函数中也没有返回,所以 ZFDebugLoad 永远不会有值......

编辑此错误的实际原因(对于遵循我所做的相同教程的任何其他人,错误的原因是这一行

$response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody()));

它使用正则表达式模式/(<head.*>)/i,这导致脚本被附加到我的 HTML5<header>标记中,为了纠正这个我在模式中插入了一个空格 /<head(?!er).*?>/i

4

2 回答 2

2

ZFDebugLoad保存 的旧值window.onload,然后用另一个函数替换它。

在窗口load上,它首先运行原始函数(如果有的话),然后运行ZFDebugCollapsed​​.
您不需要返回值。在 JavaScript 中,函数就是值。if (ZFDebugLoad)检查是否ZFDebugLoad是,即在运行脚本之前undefined是否已经有函数。window.onload如果不是udefined,则可以执行。

于 2011-03-09T05:46:15.133 回答
2

如果上面的脚本被加载了两次,那么它将无限期地递归。

第一次加载脚本时,它会按预期运行。但是,第二次加载脚本时,window.onload 的原始值会丢失,window.onload 和 ZFDebugLoad 值将是同一个函数。

由于 window.onload 现在正在检查已定义的 ZFDebugLoad,它会运行它,但现在是同一个函数,所以它会再次检查已定义的 ZFDebug,它会运行它,但是......

无穷无尽。

于 2011-03-09T07:02:18.100 回答