柯理化的第二个特点:提前返回。其实也是避免重复运算。
举个例子,写一个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);
这样的话,只需要判断一次就够了。提高了执行效率。 复制代码