JS 基础之-高阶函数(V客学院知识分享)

高阶函数英文叫Higher-order function,那什么叫高阶函数?

首先了解一个概念:JavaScript的函数其实都指向某个变量,函数的参数通常都是接收变量。那就可以把一个函数 a当成一个变量做为另一个函数b的参数。那么函数b 就是高阶函数。参考以下例子

function demo(arg){

     Alert(“测试一下)

}

调用:demo (function(){}) , 那么 demo 就是一个高价函数

原生JAVASCRIPT 李 高价函数有四个 sort 、fiter 、 map/reduce

1.Sort ,排序算法。排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素xy,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

JavaScript的Arraysort()方法就是用于排序的,参考以下案例:

 

第二个排序把apple排在了最后,是因为字符串根据ASCII码进行排序,而小写字母aASCII码在大写字母之后。

第三个排序结果却有点意外。并不是我们想象中的 [1,2,10,20],这是因为Arraysort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'ASCII码小,具体可以参见ascll 码表。

2.filter .是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

map()类似,Arrayfilter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

例如,在一个Array中,删掉偶数,只保留奇数,可以这么写:

 

3.mapmap()方法定义在JavaScript的Arraymap()传入的参数是pow,即函数对象本身。

所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把Array的所有数字转为字符串:

 

 

4.reduce Array的reduce()把一个函数作用在这个Array[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是:[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)

比方说对一个Array求和,就可以用reduce实现:

 

 

(PHP开发、web前端、UI设计、VR开发专业培训机构--VIT学院版权所有,转载请注明出处,谢谢合作!

posted @ 2017-06-24 14:37  浮水  阅读(98)  评论(0)    收藏  举报