js 高阶函数

js 高阶函数

参考:https://blog.csdn.net/high32/article/details/114000979

1. 函数式编程

函数式编程不是用函数来编程,也不是传统的面向过程编程。主旨在于将复杂的函数复合成简单的函数(计算理论,或者递归论,或者拉姆达演算)。运算过程尽量写成一系列嵌套的函数调用。

1.1 函数是“一等公民”

在 javascript 里,函数被提升到“一等公民”的地位。函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

一等公民:在编程语言中,一等公民可以作为函数参数,可以作为函数返回值,也可以赋值给变量

1.2 纯函数

函数式编程里强调,只有纯的、没有副作用的函数,才是合格的函数。

对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态的函数,叫做纯函数

var arr = [1,2,3,4,5];
arr.slice(0,3); //arr还是[1,2,3,4,5]; slice是纯函数,因为它没有副作用,对于固定的输入,输出总是固定的
arr.splice(0,3) //arr是[4,5]; splice会对原函数造成影响,所以它不是纯函数

2. 高阶函数

2.1 概念

JavaScript 的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

  • 接收函数作为参数(参数是函数)
  • 返回函数作为输出(返回值是函数)

数组中的map/filter/reduce/sort方法是 js 的原生高阶函数,也是我们常用函数。

2.2 map

map 一般用于操作数组集合,遍历操作用。

返回值:由原数组每个元素执行回调函数的结果组成的新数组。

arr.map((value,index,array)=>{},thisArg)

了解更多map方法

const arr = [1, 2, 3];
const newArr = arr.map(item => item * 2);
console.log(newArr); //[2, 4, 6]

2.3 filter

filter 一般用于筛选元素用。

返回值:一个新的、由通过测试的元素组成的数组。

arr.filter((value,index,array)=>{},thisArg)

了解更多filter方法

const arr = [1, 1, 2, 2, 3, 4, 3, 4, 5, 5, 4];
const newArr = arr.filter((ele, index, self) => {
    return self.indexOf(ele) === index;
});
console.log(newArr); // [1, 2, 3, 4, 5]

2.4 reduce

reduce 一般用于数组元素计算。

返回值:函数累计处理的单个返回值。

arr.reduce((total,value,index,array)=>{},initValue)

了解更多reduce方法

const arr = [1, 2, 3];
let sum = arr.reduce((accumulator, currentValue, currentIndex, array) => {
    return accumulator + currentValue;
});
console.log(sum); // 10

2.5 sort

sort 排序。

返回值:排序后的数组。

arr.sort((a,b)=>{})

了解更多sort方法

const arr = [1, 20, 10, 5];
let compareNumbers= function (a, b) {
    return a - b;
}
const newArr = arr.sort(compareNumbers);
console.log(newArr); // [1, 5, 10, 20]

3. 函数柯里化

通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码方式

// 普通的 add 函数
function add(x, y) {
    return x + y;
}

// Currying后
function curryingAdd(x) {
    return function (y) {
        return x + y;
    }
}

add(1, 2);           // 3
curryingAdd(1)(2);   // 3
JavaScript 文章被收录于专栏

前端技术分享

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
10-17 17:14
门头沟学院 C++
牛客410039819号:北京地区大多是919和927,这两场挂太多人了
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务