惰性加载函数

处理 IE 兼容性问题时,一般会进行一些嗅探操作,如何更好的解决这个问题呢?

例如下面自定义绑定事件函数:

标准写法
var addEvent = function(ele, type, handler) {
    // 非IE浏览器
    if (window.addEventListener) {
       return ele.addEventListener(type, handler, false);
    }
    
    // IE浏览器
    if (window.attachEvent) {
       return ele.attachEvent('on'+type, handler);
    }
};
改进一

优点: 不用每次都执行条件语句判断
缺点: 这个函数如果用不到,仍然会执行一次判断

 var addEvent = (function(ele, type, handler) {
   // 非IE浏览器
   if (window.addEventListener) {
       return function(ele, type, handler) {
           ele.addEventListener(type, handler, false);
       };
   }
   
   // IE浏览器
   if (window.attachEvent) {
       return function(ele, type, handler) {
           ele.attachEvent('on' + type, handler);
       };
   }
})();
改进二

优点: 只有第一次调用时,会执行一次条件语句

var addEvent = function(ele, type, handler) {
    // 非IE浏览器
    if (window.addEventListener) {
        addEvent = function(ele, type, handler) {
            ele.addEventListener(type, handler, false);
        };
    } else if (window.attachEvent) {
        // IE浏览器
        addEvent = function(ele, type, handler) {
            ele.attachEvent('on' + type, handler);
        };
    }
    addEvent(ele, type, handler);
};

你可能感兴趣的:(惰性加载函数)