高阶函数英文叫高阶函数,它的定义很简单,就是至少满足下列一个条件的函数:
-
<李>接受一个或多个函数作为输入李>
<李>输出一个函数李>
也就是说高阶函数是对其他函数进行操作的函数,可以将它们作为参数传递,或者是返回它们。简单来说,高阶函数是一个接收函数作为参数传递或者将函数作为返回值输出的函数。
JavaScript语言中内置了一些高阶函数,比如Array.prototype.map, Array.prototype。过滤器和Array.prototype。减少,它们接受一个函数作为参数,并应用这个函数到列表的每一个元素。我们来看看使用它们与不使用高阶函数的方案对比。
<强> Array.prototype。地图强>
map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果,原始数组不会改变。传递给地图的回调函数(回调)接受三个参数,分别是currentValue,指数(可选),数组(可选),除了回调之外还可以接受这个值(可选),用于执行调函数时使用的这个值。
来个简单的例子方便理解,现在有一个数组(1、2、3、4),我们想要生成一个新数组,其每个元素皆是之前数组的两倍,那么我们有下面两种使用高阶和不使用高阶函数的方式来实现。
<强>不使用高阶函数强>
//木易杨 const arr1=(1、2、3、4); const arr2=[]; (让我=0;我& lt;arr1.length;我+ +){ arr2。push (arr1[我]* 2); } 控制台。日志(arr2);//(2,4,6,8) 控制台。日志(arr1);//(1、2、3、4)
<强>使用高阶函数强>
//木易杨 const arr1=(1、2、3、4); const arr2=arr1。地图(项=比;* 2项); 控制台。日志(arr2);//(2,4,6,8) 控制台。日志(arr1);//(1、2、3、4)
<强> Array.prototype。过滤器强>
过滤器()方法创建一个新数组,其包含通过提供函数实现的测试的所有元素,原始数组不会改变。接收的参数和地图是一样的,其返回值是一个新数组,由通过测试的所有元素组成,如果没有任何数组元素通过测试,则返回空数组。
来个例子介绍下,现在有一个数组(1、2、1、2、3、5、4、5、3、4、4、4、4],我们想要生成一个新数组,这个数组要求没有重复的内容,即为去重。
<强>不使用高阶函数强>
const arr1=[1、2、1、2、3、5、4、5、3、4、4、4、4]; const arr2=[]; (让我=0;我& lt;arr1.length;我+ +){ 如果(arr1。indexOf (arr1[我])===我){ arr2。push (arr1[我]); } } 控制台。日志(arr2);//(1、2、3、5、4] 控制台。日志(arr1);//(1、2、1、2、3、5、4、5、3、4、4、4、4]
<强>使用高阶函数
强>
const arr1=[1、2、1、2、3、5、4、5、3、4、4、4、4]; const arr2=arr1。过滤器((元素、索引、自我)=比;{ 回归自我。indexOf(元素)===指数; }); 控制台。日志(arr2);//(1、2、3、5、4] 控制台。日志(arr1);//(1、2、1、2、3、5、4、5、3、4、4、4、4]
<强> Array.prototype。减少强>
reduce()方法对数组中的每个元素执行一个提供的减速器函数(升序执行),将其结果汇总为单个返回值。传递给减少的回调函数(回调)接受四个参数,分别是累加器蓄电池,currentValue, currentIndex(可选),数组(可选),除了回调之外还可以接受初始值initialValue值(可选)。
-
<李>如果没有提供initialValue,那么第一次调用回调函数时,蓄电池使用原数组中的第一个元素,currentValue即是数组中的第二个元素。在没有初始值的空数组上调用减少将报错。李>
<李>如果提供了initialValue,那么将作为第一次调用回调函数时的第一个参数的值,即蓄电池,currentValue使用原数组中的第一个元素。李>
来个简单的例子介绍下,现在有一个数组[0,1,2,3,4),需要计算数组元素的和,需求比较简单,来看下代码实现。
不使用高阶函数
const arr=[0、1、2、3、4); 让金额=0; (让我=0;我& lt;arr.length;我+ +){ 和+=arr[我]; } 控制台。日志(总和);10深入学习JavaScript高阶函数