首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中一个简单的高阶函数示例

javascript中一个简单的高阶函数示例
EN

Stack Overflow用户
提问于 2012-08-10 19:34:46
回答 1查看 1.5K关注 0票数 2

在浏览Eloquent Javascript (Chapter 6)时,会引用Javascript中的高阶函数。虽然在第3章中提供了一个例子,但我相信它可以更简单一些,因为我仍然不完全理解这个概念。在网上搜索后,我似乎找不到任何关于高阶函数的简洁示例。

我希望在Javascript中看到一个基本的/简单的高阶函数来解释这个概念。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-10 19:42:02

更高的函数是来自functional programming的概念。简而言之,更高的函数是以另一个函数为参数的函数。在javascript中,最近添加了一些更高的函数。

代码语言:javascript
复制
Array.prototype.reduce 
//With this function, we can do some funny things.
function sum(array){
    return array.reduce(function(a, b){ return a + b; }, 0);
}

因此,在上面的示例中,reduce是一个高阶函数,它接受另一个函数,即示例中的匿名函数作为参数。reduce的签名如下所示

代码语言:javascript
复制
reduce(func, init);
//func is a function takes two parameter and returns some value.
// init is the initial value which would be passed to func
//when calling reduce, some thing happen

//step 1.
[1, 2, 3, 4, 5].reduce(function(a, b){ return a + b }, 0);
//step 2.
[2, 3, 4, 5].reduce(function(a, b){ return a + b}, 0 + 1);
//step 3.
[3, 4, 5].reduce(function(a, b){ return a + b}, 0 + 1 + 2);
//...

如您所见,reduce迭代一个数组,并使用init和该数组的第一个元素应用func,然后将结果绑定到init

另一个高阶函数是filter

代码语言:javascript
复制
Array.prototype.filter
//As the name indicates, it filter out some unwanted values from an Aarry. It also takes a function, which returns a boolean value, true for keeping this element.
[1, 2, 3, 4, 5].filter(function(ele){ return ele % 2 == 0; });

有了上面两个例子,我不得不说高阶函数并不那么容易理解,特别是reduce。但这并不复杂,使用高阶函数,实际上你的代码会更干净,可读性更好。以filter为例,它告诉人们它会丢弃所有奇数。

在这里,我想实现一个简单的filter函数来向您展示如何实现。

代码语言:javascript
复制
function filter(array, func){
    var output = [];
    for(var i = 0; i < array.length; i++){
      if(func(array[i])) output.push(array[i]);
    }
    return output;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11900813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档