高阶函数特点:
1、函数的返回值是一个函数
2、函数的参数是一个函数(回调函数)
高阶函数作用:
1、将函数的参数预置
2、对函数进行功能扩展
高阶函数应用:
闭包是基于高阶函数特性产生的,但高阶函数不一定就是闭包
Promise
函数柯里化:函数范围具体化被称为函数柯里化。
下面代码为函数柯里化的例子
function isType(type, val) {
return Object.prototype.toString.call(val) === `[object ${type}]`
}
// 缺点:每次都要传入type参数
// 改进:将type进行预置
function isType(type) {
return function(val) {
return Object.prototype.toString.call(val) === `[object ${type}]`
}
}
let isNumber = isType('Number')
let isArray = isType('Array')
isNumber(123)
isArray([])
let utilsType = {}
['Object', 'Array', 'Date', 'Boolean', 'Undefined', 'Null', 'Number', 'String', 'Symbol', 'Function'].forEach(type => {
utilsType[`is${type}`]= isType(type)
})
utilsType.isNumber(1)
utilsType.isArray([])
将isType转为小范围的某种类型的判断方法:如isNumber, isArray就是函数柯里化。