什么是高阶函数

434 阅读1分钟

高阶函数

我们经常会判断一个数据是否是某某类型,如判断 “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 的方法,用来判断是否属于字符串类型呢(判断其他类型同理)

高阶函数

维基百科对于 高阶函数 的定义:

在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

  1. 接受一个或多个函数作为输入
  2. 输出一个函数

那我们现在将上面的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-高阶函数