javascript的高阶函数
高阶函数:听到高阶感觉很高大上的一个词,但是实现起来并不是那么难。
记得有一次在看js面试题相关资料时,看到类似于下面一个题目,实现一个函数,能有如下写法,实现两个值相加并返回,写法大概是这样的:
add(10)(5);
以前没见过这种写法,相信大家对下面的写法肯定不陌生:
function add(){
return function(a,b){
return a + b;
};
}
// 然后调用的时候写成下面的样子
add()(10,5);
// 最后返回15
仔细观察这两种写法,发现它们在写法上差别很小,第一种写法是一个括号里放一个参数,而第二种写法是把两个参数放在同一个括号里,既然写法类似,实现起来肯定区别也不是特别大,且看下面的实现:
function add(a){
return function(b){
return a + b;
}
}
这样我们就实现了一个高阶函数。在上面两个例子中,调用add并没有立即返回一个计算后的值,而是返回了一个函数,调用该返回的函数后,才会返回具体计算后的值,这样就有了第二对括号。
再来看个例子:
function func(p1){
var self = this;
function fd(p2) {
this.add1 = function (p3) {
return p1 + "," + p2 + " " + p3;
};
}
self.add = function (p2){
fd.call(this, p2);
return this.add1;
};
return self.add;
}
// 也可以直接这样实现
function func(p1){
return function(p2){
return function(p3){
return p1 + "," + p2 + " " + p3;
}
}
}
这里只是简单的一种实现,还有很多比较复杂的场景需要更通用的实现方法。