这是我参与更文挑战的第4天,活动详情查看: 更文挑战
紧跟上一篇 ,这一篇主要了解高阶函数
什么是高阶函数?
- 接受函数作为参数或者返回函数作为输出的函数。
function foo(x){
return function(){
return x;
}
}
复制代码
- 为什么会有高阶函数?
- 高阶函数比普通函数要灵活的多,除了通常意义的函数调用返回外,还形成了一种后续传递风格的结果接收方式,而非单一的返回值形式,后续传递风格的程序编写将函数的业务重点从返回值转移到了回调函数中。
- 高阶函数在JS中的应用比比皆是,其中ECMAScript5中提供的一些数组方法就是典型的高阶函数,比如:forEach()、map()、reduce()、reduceRight()、filter()、every()、some()等。
- 函数作为参数传入
- 函数作为参数传入最常见的就是回调函数。例如:在 ajax 异步请求的过程中,回调函数使用的非常频繁。因为异步执行不能确定请求返回的时间,将callback回调函数当成参数传入,待请求完成后执行 callback 函数。
$.ajax({
url: 'ajaxUrl',
data: data,
success: function (res) {
callback && callback(res.result.songs);
}
})
复制代码
- 函数作为返回值输出
- 函数作为返回值输出的应用场景那就太多了,这也体现了函数式编程的思想。其实从闭包的例子中我们就已经看到了关于高阶函数的相关内容了。
- 还记得在我们去判断数据类型的时候,我们都是通过Object.prototype.toString来计算的,每个数据类型之间只是'[object XXX]’不一样而已。
- 封装一个高阶函数,实现对不同类型变量的判断
function isType (type) {
return function (obj) {
return Object.prototype.toString.call(obj) === `[object ${type}]
}
}
const isArray = isType('Array'); // 判断数组类型的函数
const isString = isType('String'); // 判断字符串类型的函数
console.log(isArray([1, 2]); // true
console.log(isString({}); // false
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END