Javascript “意外”;否则";和功能未运行

Javascript “意外”;否则";和功能未运行,javascript,google-chrome,javascript-events,Javascript,Google Chrome,Javascript Events,此代码似乎运行不正常: var addEventListener = (function () { "use strict"; if (document.addEventListener) { return function (element, event, handler) { element.addEventListener(event, handler, false); }; } else {

此代码似乎运行不正常:

var addEventListener = (function () {
    "use strict";
    if (document.addEventListener) {
        return function (element, event, handler) {
            element.addEventListener(event, handler, false);
        };
    } else {
        return function (element, event, handler) {
            element.attachEvent('on' + event, handler);
        };
    }
})();

addEventListener(window, 'onload', calcFailback);
Chrome返回:

未捕获的TypeError:对象onload没有方法“addEventListener”

Jslint返回:

还有其他意想不到的


有什么想法吗?

您正在创建一个全局变量
addEventListener
,它将作为
窗口的属性添加。因此,
window.addEventListener
元素
=
窗口
,通过此调用)实际上是指您的自定义函数,而不是本机函数。使用不同的名称:

var myAddEventListener = (function() {
    "use strict";
    if (document.addEventListener) {
        return function(element, event, handler) {
            element.addEventListener(event, handler, false);
        };
    } else {
        return function(element, event, handler) {
            element.attachEvent('on' + event, handler);
        };
    }
})(); //<-- invoke it

谢谢,补充了这一点,但我得到了另一个错误:uncaughttypeerror:objectonload没有“addEventListener”方法,它现在部分工作。它运行,但由于某些原因不能调用两次。我仍然得到JSlint错误:“return”之后出现意外的“else”。知道为什么吗?@SnippetSpace不能使用相同的
useCapture
将同一函数作为事件侦听器添加到同一元素中两次。我不喜欢JSLint,所以我不知道为什么根据crockford的说法,
else
不是“最佳实践”。else只是不需要。如果第一个“If”为真,则函数停止。如果没有,请继续并返回2e“返回”。您可以删除整个else{}:)请不要用破坏问题原始上下文的编辑覆盖您的问题。
myAddEventListener( window, "load", function(){})