高阶函数

维基百科这样描述:

高阶函数是至少满足下列一个条件的函数:
1. 接受一个或多个函数作为输入
2. 输出一个函数

简言之,一个函数可以将其他函数作为参数或者返回值是函数,这个函数就是高阶函数。

JavaScript中的高阶函数

map
1. 定义:通过指定的函数去处理数组中的每个元素,并返回处理后的新数组。
2. 语法:array.map(function(currentValue,index,arr), thisValue)
3. 实例:

function multi(x) {
    return x * 10;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(results);
//结果为:10,20,30,40,50,60,70,80,90

function multi(element, index, arr) {
    console.log(element, index, arr)
    return element * 10;
}
var arr = [10, 20, 30, 40, 50, 60, 70, 80, 90];
var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
console.log(results);

reduce
1. 定义:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
2. 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
注意:末尾的参数initialValue可以指定total初始值。
3. 实例

// 求和
var arr = [1, 3, 5, 7, 9];
var sum = arr.reduce(function (x, y) {
    return x+y
});
console.log(sum) // 25
//是指拼接
var arr = ['1', '3', '5', '7', '9'];
var sum = arr.reduce(function (x, y) {
    return x+y
},5);
console.log(sum) // 513579

filter
1. 定义: 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
2. 语法:array.filter(function(currentValue,index,arr), thisValue)
3. 实例

var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var newArr = arr.filter(function (x) {
    return x > 8;
});
console.log(newArr) //[ 9, 10, 15 ]

以上部分的高阶函数是将函数作为输入,当然还可以将函数作为结果值返回。

function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
    return sum;
}

var f = lazy_sum([1, 2, 3, 4, 5]); 

f(); // 15

当调用lazy_sum函数时,返回的是内层的sum函数。

在这个实例中,引出了另外一个概念:闭包

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成了,闭包中包含了内部函数的代码,以及所需外部函数中的变量的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青菜小王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值