1.函数的可变参数写法场景(响应式)
现在我们有一个应用场景,假如老师让我们做数学计算。
老师让我们首先计算1+2,那好,我们去写一个方法。
![]()
老师让我们首先计算1+2+3,那好,我们去写一个方法。
![]()
那老师让我们计算1+2+3+4+5+6.....100呢?我们还去这样写吗?
这是后就应用到了函数的可变参数写法。
![]()
![]()
2.函数式编程之高阶函数。
没学过函数式编程之前,我们是这样做的。
需求1:现在,我们有一个nums数组,取出nums数组当中,所有小于100的数字。

需求2:将取出所有的小于100的数字进行乘2

需求3:将new2Nums数组中的所有数字进行相加

我们发现没学习高阶函数之前,采用的是层层遍历的写法。

学习过高阶函数后,filter/map/reduce。
1.通过高阶函数:过滤filter(function(){}),实现需求1
方法:arr.filter(callbackfn,执行一个回调函数)
关于过滤filter的要求:filter中执行回调函数有一个要求,必须返回一个boolean值,true:函数内部会自动将这次回调函数的形参加入到新的数组中,flase:函数内部会过滤掉这次形参

看下伪代码的解释

2.高阶函数map()的使用,实现需求2,他的原理方法类似filter()函数,map映射函数()里面传的也是一个回调函数。
作用:对遍历数组变化操作

3.高阶函数reduce()的使用,实现需求3,()里面传的也是一个回调函数。
作用:对数组中所有内容进行汇总
形式剖析:reduce(放置参数一,放置参数二)
这个函数很特别,参数一放置的是一个回调函数,(在这个回调函数里面还放置会2个参数),参数二放置的是一个初始值:可以为0。



按照上面的写法一坨坨,分成三坨了,其实高阶函数还可以连用实现需求123.
这就是所谓的函数式编程,一行代码搞定三种需求。

代码太长我们可以换行

网友评论