参数复用

如果是相同的参数,在计算之后不需要再次重新传入参数。

function add(a){
	return function(b){
		return function(c){
			return a + b + c;
		}
	}
}

console.log(add(1)(2)(3)); // 6

var add1 = add(1);
var add2 = add1(2);
console.log(add2(3)); // 6

提前返回

多次调用多次内部判断,可以直接把第一次判断的结果返回外部接收。

var addEvent = function(){
	if(window.addEventListener){
		return function(el,type,fn,capture){
			// ...
		}
	}
	if(window.attachEvent){
		return function(el,type,fn,capture){
			// ...
		}
	}
}

var addEvent_new = addEvent();
addEvent_new(div,click,callback,false);
addEvent_new(span,click,callback,false);

延迟执行

避免重复地去执行程序,等真正需要结果的时候再执行。

var curryScore = function(fn){
	var _allScore=[];
	return function(){
		if(arguments.length===0){
			 fn.apply(null,_allScore);
		}
		_allScore=_allScore.concat([].slice.call(arguments))
	}
}
var allScore=0;
var addScore = curryScore(function(){
	for (var i = 0; i < arguments.length; i++) {
		allScore += arguments[i]
  }
})

addScore(1)
addScore(5)
console.log(allScore) // 0
addScore()
console.log(allScore) // 6