什么是高阶函数
高阶函数的维基百科定义:至少满足以下条件之一:
- 接受一个或多个函数作为输入;
- 输出一个函数;
function add (x, y, fn) {
return fn(x) + fn(y);
}
var x = -5,
y = 6,
fn = Math.abs
add(x, y, fn) // 11
高阶函数的好处
// 正常函数
function isType (obj, type) {
return Object.prototype.toString.call(obj).includes(type)
}
let type = 'xxx'
let is = true
console.log(isType(type, 'String')) // true
console.log(isType(type, 'Boolean')) // false
console.log(isType(is, 'Bolean')) // false,这里因为写错了才为 false
// 假如不小心把 Boolean 写错了 Bolean,没注意,这也不会报错还会安装平常返回判断,但是这可能是错的,很多时候这种错误是不容易发现
其实可以换种写法,但是注意⚠️写类型列表时没有写错就可以避免上面的情况
下面是高阶函数写法
// 高阶函数
function isType (type) {
return function (obj) {
return Object.prototype.toString.call(obj).includes(type)
}
}
const types = ['String', 'Object', 'Array', 'Null', 'Undefined', 'Boolean']
let fns = {}
types.forEach(type => fns[`is${type}`] = isType(type))
let type = 'xxx'
let is = true
console.log(fns.isString(type)) // true
console.log(fns.isBoolean(type)) // false
console.log(fns.isBolean(type)) // fns.isBolean is not a function
// 这里一样是把 Boolean 写成了 Bolean,但是这里就报错让我们可以发现这里写错了,而不是像上面那样,还以为是正常的
网友评论