Javascript 来自自定义事件函数的Chrome中的堆栈溢出
我一直在开发一个特定于webkit的库,在我的测试中,我意外地将两个参数按错误的顺序放置,不知何故,这导致了堆栈溢出而不是错误。我想知道,在我提交bug之前,社区是否能为我提供一些见解,解释为什么这可能会导致Chrome中的堆栈溢出Javascript 来自自定义事件函数的Chrome中的堆栈溢出,javascript,google-chrome,Javascript,Google Chrome,我一直在开发一个特定于webkit的库,在我的测试中,我意外地将两个参数按错误的顺序放置,不知何故,这导致了堆栈溢出而不是错误。我想知道,在我提交bug之前,社区是否能为我提供一些见解,解释为什么这可能会导致Chrome中的堆栈溢出 var fn = function (eventType, element, callback) { var filter = function(eventType, element, callback) { var length = ele
var fn = function (eventType, element, callback) {
var filter = function(eventType, element, callback) {
var length = element.length;
for(var i=0;i<length;i++) {
fn(eventType, element[i], callback);
}
};
if ( element && element.nodeName || element === window ) {
element.addEventListener(eventType, callback, false);
} else if (element && element.length) {
filter(eventType, element, callback);
}
};
var fn=function(事件类型、元素、回调){
var filter=函数(事件类型、元素、回调){
变量长度=element.length;
对于(var i=0;i代码实际上不会导致堆栈溢出。如果将js5.addEvent(…)
行替换为console.log(element[i]);
控制台中的输出是element string变量中的每个字符。请参阅
尽管从下面的链接来看,我相信代码行可能是fn(…)
。这会导致无限递归反复调用filter,fn,filter,fn,直到达到最大堆栈大小。请参阅:
这是意料之中的,不是bug。Oops,我的js5.addEvent行仍然存在,我直接从我的库中移植了它,而忽略了测试它。它应该是对自身的递归调用。感谢您向我指出这一点。也感谢您的解释,它对我来说非常有意义。我知道如何简化它为了防止不必要的递归,我对if语句进行了更改,我只是好奇错误的来源。