js惰性载入函数,为什么指调用了一次呢

var addEvent = function(el,type,handler){
    addEvent = el.addEventListener ? function(el,type,handler){
        el.addEventListener(type,handler,false);
    } : function(el,type,handler) {
        el.attachEvent("on" + type,handler);
    }
    addEvent(el,type,handler);
};

这是网上看到的一个判断兼容性的
他是说只检查一次兼容性,以后就不会再检查了,我不太明白为什么指检查了一次呢?如果以后都不检查,他是怎么记住的呢???

阅读 4.6k
4 个回答

第一次调用addEvent的时候,addEvent内部对兼容性做了一次判断并且重写了addEvent,所以后续就不用判断了。

首先我不认为你找的代码是OK的,试一试下面的
var addEvent =(function(el,type,handler){ addEvent = el.addEventListener ? function(el,type,handler){ el.addEventListener(type,handler,false); } : function(el,type,handler) { el.attachEvent("on" + type,handler); }
})();
解释 :使用一个立即函数执行后addEvent就是指定的兼容事件监听的函数。

var addEvent这句只会执行一次。
后面调用addEvent函数时,就会使用上面var指定的函数。。。

其实我也遇到了这个问题。今天 在学 函数惰性加载。

    var addEvent = function(elem, type, handler){
    if(window.addEventListener){
        addEvent= function(elem, type, handler){
            elem.addEventListener(type, handler, false)
        }
    }else if(window.attacheEvent){    
        addEvent= function(elem, type, handler){
            elem.attacheEvent('on'+type, handler);
        }
    }
    
    return addEvent(elem, type, handler);
}

出现的问题是 在ie 出现堆栈溢出。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题