- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript中的函数式编程实践
JavaScript中的函数式编程实践
函数式编程语言在学术领域已经存在相当长一段时间了,但是从历史上看,它们没有丰富的工具和库可供使用。随着.NET平台上的Haskell和F#函数式编程语言的出现,其变得更加流行。一些传统的编程语言,例如C++和JavaScript,也引入了由函数式编程提供的一些构造和特性。
在许多情况下,JavaScript的重复代码导致了一些拙劣的编码。如果使用函数式编程,就可以避免这些问题。此外,可以利用函数式编程风格编写更加优美的回调。因为函数式编程采用了完全不同的组织程序的方式,所以那些习惯于采用命令式范例的程序员可能会发现函数式编程有点难学。
函数式编程概念
在那些通过描述“如何做”指定解决问题的方法的语言中,许多开发人员都知道如何进行编码。例如,要编写一个计算阶乘的函数,我可以编写一个循环来描述程序,或者使用递归来查找所有数字的乘积。在这两种情况下,计算的过程都在程序中进行了详细说明。清单1显示了一个计算阶乘的可能使用的C代码。
清单?1.?过程风格的阶乘 ?
int?factorial?(int?n) ?
{ ?
??if?(n?=?0) ?
????return?1; ?
??else ?
????return?n?*?factorial?(n-1); ?
}?
这类语言也叫做过程性编程语言,因为它们定义了解决问题的过程。函数式编程与这个原理有显著不同。在函数式编程中,需要描述问题“是什么”。 函数式编程语言又叫做声明性语言。同样的计算阶乘的程序可以写成所有到n的数字的乘积。计算阶乘的典型函数式程序看起来如清单2中的示例所示。
清单?2.?函数式风格的阶乘 ?
factorial?n,?where?n?=?0??:=?1?
factorial?n????:=?foldr?*?1?take?n?[1..]?
第二个语句指明要得到从1开始的前n个数字的列表(take n [1..]),然后找出它们的乘积,1 为基元。这个定义与前面的示例不同,没有循环或递归。它就像阶乘函数的算术定义。一旦了解了库函数(take 和 foldr)和标记(list notation [ ])的意义,编写代码就很容易,而且可读性也很好。只用三行Miranda代码就可以编写例程,根据参数,使用广度优先或深度优先遍历处理n叉树的每个节点,而且元素可以是任何通用类型。? ?从历史上看,函数式编程语言不太流行有各种原因。但是最近,有些函数式编程语言正在进入计算机行业。其中一个例子就是.NET平台上的Haskell。其他情况下,现有的一些语言借用了函数式编程语言中的一些概念。
一些C++实现中的迭代器和continuation,以及JavaScript中提供的一些函数式构造(functional construct),就是这种借用的示例。但是,通过借用函数式构造,总的语言编程范例并没有发生变化。JavaScript并没因为函数式构造的添加就变成了函数式编程语言。
这里我们主要讨论了JavaScript中的函数式构造的各种美妙之处,以及在日常编码和工作中使用它们的方式。我们将从一些基本功能开始,然后用它们查看一些更有趣的应用。
匿名函数
在JavaScript中,可以编写匿名函数或没有名称的函数。为什么需要这样的函数?请继续往下读,但首先我们将学习如何编写这样一个函数。如果拥有以下JavaScript 函数:
清单?3.?典型的函数 ?
function?sum(x,y,z)?{ ?
??return?(x+y+z); ?
}?
然后对应的匿名函数看起来应当如下所示:
清单?4.?匿名函数 ?
function(x,y,z)?{ ?
??return?(x+y+z); ?
}?
要使用它,则需要编写以下代码:
清单?5.?应用匿名函数 ?
var?sum?=?function(x,y,z)?{ ?
??return?(x+y+z); ?
}(1,2,3); ?
alert(sum);?
使用函数作为值
也可以将函数作为值使用。还可以拥有一些所赋值是函数的变量。在最后一个示例中,还可以执行以下操作:
清单?6.?使用函数赋值 ?
var?sum?=?function(x,y,z)?{ ?
??return?(x+y+z); ?
} ?
alert(sum(1,2,3));?
在上面清单6的示例中,为变量sum赋的值是函数定义本身。这样,sum就成了一个函数,可以在任何地方调用。
调用函数的不同方法
JavaScript允许用两种方式调用函数,如清单7和8所示。
清单?7.?典型的函数应用 ?
alert?(“Hello,?World!); ?
或 ?
清单?8.?用函数作为表达式 ?
(alert)?(“Hello,?Worl
您可能关注的文档
最近下载
- 悬架零件部开发.pdf VIP
- 建筑工程图集 L13S2给水工程_08.pdf VIP
- 汽车副车架总成技术条件.pptx VIP
- 低压配电设计规范演示文稿.ppt VIP
- 2025上半年中级软件水平考试《软件设计师(综合知识)》新版真题卷(含详细解析).docx VIP
- 整车集成设计指南(冷却系统布置).pptx VIP
- 销售人员必备贵州省黔西市兴仁县医疗机构分布明细.doc VIP
- 2025年新版人教版四年级上册英语 四上Unit 4 Helping in the community单元整体教学设计.pdf VIP
- 销售人员必备贵州省黔西市卫生室医务室及诊所医疗机构明细.doc VIP
- 路基路面弯沉检测记录表.docx VIP
文档评论(0)