Javascript 对于很多递归,这段代码做什么?
我已经实现了这个脚本的一部分来帮助我进行调试Javascript 对于很多递归,这段代码做什么?,javascript,zend-debugger,Javascript,Zend Debugger,我已经实现了这个脚本的一部分来帮助我进行调试 var ZFDebugLoad = window.onload; window.onload = function(){ if (ZFDebugLoad) { ZFDebugLoad(); } ZFDebugCollapsed(); }; Firebug给我的错误是“错误时中断太多递归” 代码对我来说就像一个无止境的循环,所以我想知道为什么最初的作者会把它放进去。而且函数中没有返回,因此ZFDebugLoad永远不会有
var ZFDebugLoad = window.onload;
window.onload = function(){
if (ZFDebugLoad) {
ZFDebugLoad();
}
ZFDebugCollapsed();
};
Firebug给我的错误是“错误时中断太多递归”
代码对我来说就像一个无止境的循环,所以我想知道为什么最初的作者会把它放进去。而且函数中没有返回,因此ZFDebugLoad永远不会有值
编辑此错误的实际原因(对于遵循相同教程的任何其他人,错误的原因是这一行)
$response->setBody(preg_replace('/(<head.*>)/i', '$1' . $this->_headerOutput(), $response->getBody()));
$response->setBody(preg_replace('/()/i','$1'.$this->\u headerOutput(),$response->getBody());
它使用regex模式
/()/i
,这导致脚本被附加到我的HTML5
标记中,我没有纠正这一点,我在模式中插入了一个空格//i
ZFDebugLoad
保存window.onload的旧值,然后用另一个函数替换它
在窗口load
上,它首先运行原始函数(如果有),然后运行zf
您不需要返回值。在JavaScript中,函数就是值。if(ZFDebugLoad)
检查ZFDebugLoad
是否是未定义的
,也就是说,在运行脚本之前,是否已经有了窗口。onload
函数。如果它不是udefined
,则可以执行。如果上面的脚本加载了两次,那么它将无限期地递归
第一次加载脚本时,它将按预期运行。
但是,第二次加载脚本时,window.onload的原始值将丢失,window.onload和ZFDebugLoad值将是同一个函数
由于window.onload现在正在检查ZFDebugLoad(已定义),它将运行该函数,但现在是同一个函数,因此它将再次检查ZFDebug(已定义),它将运行该函数,但
无限大。那么为什么Firebug对很多递归说,这不是它试图执行无数次的信号吗?@Moak-我已经检查过了,它似乎工作正常:,所以问题很可能在其他地方。可能原始函数有一个无限递归,zfdebug
有一个,或者t场景比显示的更复杂(例如,整个代码包含在一个绑定到onload
)的函数中),我看到了,然后我需要弄清楚,它可能是由其他jQuery插件触发的,因为当我禁用除该脚本之外的所有脚本时,它可以正常工作而不会导致错误。