Applicative编程: 将函数作为参数传递给另外一个函数,并且调用它。
最常见的有数组的 map、reduce、filter函数等。
- 例一: 实现一个函数,查找出某个数组中所有数字,可能实现一个findNumber方法,
那如果后面又有查找字母、查找大于10的数字…这些需求呢? 难道每个需求都要添加一个函数?
可以使用高阶函数,将一个条件判断的函数当做参数传递到一个通用的find函数中!
1 | function find(array, pred/!*function*!/) { |
- 例一的代码还可以写成如下形式,通过返回函数来定制不同行为
- @param pred
- @returns {Function}
1 | function find(pred) { |
- 例二: 写一个函数,来判断传入的参数是不是某种类型的数据
1
2
3
4
5
6
7
8
9
10
11
12var isType = function (Type) {
return function (data) {
return Object.prototype.toString.call(data) === '[object ' + Type + ']';
}
}
// * 1.判断是不是Number类型数据
var isNumber = isType('Number');
console.log(isNumber(0)); //true
// * 2.判断数据是不是字符串类型
var isString = isType('String'); //true
console.log(isString('123')); //true
console.log(isString(123)); //false