柯理化学习笔记(二)

179 阅读1分钟

柯理化的第二个特点:提前返回。其实也是避免重复运算。

举个例子,写一个addEvent方法,addEvent进行浏览器的兼容。

// bad code
function addEvent (el, type, fn, capture) {
    if (window.addEventListener) {
// 进行浏览器的兼容,如果是现代浏览器,走这里
        el.addEventListener(type, fn, capture);
    } else {
// 如果是IE的旧版浏览器,走这里。
        el.attachEvent(type, fun, capture);
    }
}
//这段代码,看着没什么问题。但是当我们在反复调用此方法时,回多次进行浏览器判断,显然这是没有必要的。
浏览器环境不会变,只需要最开始判断一次就够了。

// good code
function addEvent() {
    if (window.addEventListener) {// 进行浏览器的兼容,如果是现代浏览器,走这里        return function(el, type, fn, capture) {
            el.addEventListener(type, fn, capture);
        }
    } else {
        return function (el, type, fun, capture) {
            el.attachEvent(type, fun, capture);
        }
    }
}
// 用的时候
let addEvent2 = addEvent();
addEvent2(div, 'click', callback, true);    
这样的话,只需要判断一次就够了。提高了执行效率。