高阶函数
我们经常会判断一个数据是否是某某类型,如判断 “1” 是否是 String 类型,123 是否是 Number 类型等等
那我们可以定义好一个判断函数 isType:
function isType(type, value) {
return Object.prototype.toString.call(value) === `[object ${type}]`
}
isType(‘String’, ‘a’) // true
isType(‘String’, ‘b’) // true
isType(‘String’, 123) // false
可以看到如果都判断String类型的话,函数的第一个参数都是一样的
那么我们就想了,是不是有一种方法,基于原有的isType 方法,封装一个 isStringType 的方法,用来判断是否属于字符串类型呢(判断其他类型同理)
高阶函数
维基百科对于 高阶函数 的定义:
在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
那我们现在将上面的isType 函数改写一下
const isType = type => {
// 将type这个变量保存在了这个代码块中,不会被销毁
return value => Object.prototype.toString.call(value) === `[object ${type}]`
}
const isString = isType(’String’)
const isNumber = isType(’Number’)
isString(‘hello’) // 等同于isType(‘String’)(‘hello’)
isNumber(111) // 等同于isType(‘Number’)(111)
::闭包:一个函数不在自己的所在作用域下执行::
#study/javascript/1-高阶函数