Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自自定义事件函数的Chrome中的堆栈溢出_Javascript_Google Chrome - Fatal编程技术网

Javascript 来自自定义事件函数的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

我一直在开发一个特定于webkit的库,在我的测试中,我意外地将两个参数按错误的顺序放置,不知何故,这导致了堆栈溢出而不是错误。我想知道,在我提交bug之前,社区是否能为我提供一些见解,解释为什么这可能会导致Chrome中的堆栈溢出

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语句进行了更改,我只是好奇错误的来源。