当前位置: 首页 > 编程日记 > 正文

《JavaScript应用程序设计》一一2.3 lambdas

本节书摘来华章计算机出版社《JavaScript应用程序设计》一书中的第2章,第2.3节,作者:Eric Elliott 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 lambdas

lambdas是指那些作为数据使用的函数,它可以是函数的传入参数,也可以是函数的返回值,更可以是一个字面量,总之它的用法与普通的表达式十分类似。
举例来说:

var sum = function sum() {var result = 0;[5, 5, 5].forEach(function addTo(number) { result += number; });return result;
};test('Lambdas.', function () {equal(sum(), 15,'result should be 15.');
});

被传入forEach()方法的addTo()函数就是一个lambda,它在数组中的每项值上做调用。需要注意的是,它在其函数作用域中是可以访问到Result变量的。ECMAScript 5规范定了诸多像数据方法forEach()这样的函数枚举器。更多细节请参见“函数式编程”一节。
在JavaScript中, lambda的使用场景多见于:
· 在入参上执行一连串操作。
· 为DOM元素操作添加事件监听器。
· 用于在当前函数执行完成时,调用的回调函数。
· 包裹现有函数,为其添加新的功能(例如混入日志埋点这样的“横向”功能,具有这类行为的函数称为函数装饰者)。
· 将接受多个参数的函数包转化为接受少量参数的函数,或者将函数中的某些参数值固定(参见 “偏函数应用与函数加里化”一节)。
· 从一个函数中返回另一个函数。例如,一个函数接受一个参数,调用后返回一个加里化函数,而先前传入的参数已经预设在这个加里化函数的内部。
Lambda经常被误认为是匿名函数、闭包、一类函数、高价函数。只能说它们的概念较为类似,但是实际应用场景各不相同。
有些语言使用特殊字符或关键字语法来声明 lambda,从而省略了函数名,但千万不要理所当然得认为它就是匿名函数。名称省略对lambda来说仅仅是一种语法糖,是为了让声明与使用起来更加方便,lambda的首要特性是它能够在函数的输入输出中,被当作数据“传递”,而不在乎它是否已被命名。
人们经常把“闭包”与“lambda”的含义弄混淆,并不是所有的lambda都是闭包,也并非所有的闭包都是lambda。闭包引用了外层函数作用域上的变量,而lambda只是被视为数据的函数,两者从概念上来说还是有差别的,在支持lambda的语言中不见得可以使用闭包。
在JavaScript中函数是“一等公民”,意味着它们可以被当作一种特殊变量来使用,但这并不表示所有函数都是lambda。lambda 在JavaScript中更多的是指代一种函数特性,即将函数作为数据来处理的一种能力。
在高价函数中那些从外界传入或返回的函数都可以视作 lambda,一个lambda可能同时也是高价函数,但并不是所有高价函数都是lambda。
注意: 如果一个函数被其他函数作为参数或返回值来使用,那么它便是lambda。

相关文章:

Java异常体系结构

一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架, 是Java语言健壮性的一个重要体现。 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable…

关于IssueVision命令模式中对象生命周期的困惑

在IssueVision的命令模式中有如下代码(\Patterns\Commander.cs)public static void Connect(ToolBarButton button, Command command){ToolBarButtonCommander unused new ToolBarButtonCommander(button, command);}按理说unused是内部变量,生命周期应该在Connect方法的作用范…

《树莓派开发实战(第2版)》——1.15 使用蓝牙设备

本节书摘来自异步社区《树莓派开发实战(第2版)》一书中的第1章,第1.15节,作者[英]Simon Monk(蒙克),韩波 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.15 使用蓝牙…

C#语言与面向对象技术(5)

本图文主要掌握以下问题: 1. 什么是接口? 2. 接口的实现与类的继承有什么区别? 3. 接口与抽象类的相同点与不同点在哪里? 4. C#允许一个类实现多个接口,若多个接口中存在重名方法,如何处理?…

Java序列化的机制和原理

有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍。 Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节…

转 --有些事情需要注意

1:能不抽烟最好不抽,它或许可以帮助你吸引一些女生,但不抽绝不会招来厌烦,表现男子气概的途径有很多,没必要拿健康做赌注。2:给自己定目标,一年,两年,五年,也许你出生不如…

《Python数据分析与挖掘实战》一3.1 数据质量分析

本节书摘来自华章出版社《Python数据分析与挖掘实战》一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区“华章计算机”公众号查看 3.1 数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环&am…

Matlab与线性代数 -- 矩阵的右除

打磨一项技能最需要的就是耐心,我们知道做一件事情不会一蹴而就,需要长时间的积累。关于Matlab的打磨会持续很长的时间,每天学习一个知识点,一年下来就不得了。要有耐心,要有耐心,跟着我们每天花5分钟的时间…

Java中的值传递和引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参…

ASP.NET网站建设基本常用代码

1.为按钮添加确认对话框Button.Attributes.Add("onclick","return confirm(确认?)");Button.Attributes.Add("onclick","if(confirm(确定?)){return true;}else{return false;}") 2.表格超连接列传递参数<asp:HyperLinkColumn Ta…

C#语言与面向对象技术(6)

本图文主要掌握以下问题&#xff1a; 1.什么是“类型安全”问题&#xff1f; 2.为什么要引入泛型&#xff1f; 3.什么是泛型&#xff1f; 4.泛型是如何实现的&#xff1f; 5.类与类之间存在哪些关系&#xff0c;如何表示&#xff1f;

Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

Xposed Xposed能够勾住(Hook) Android应用程序对象的方法&#xff0c;实现AOP&#xff0c;一个简单的例子&#xff1a; public class WebViewHook implements IXposedHookLoadPackage {// handleLoadPackage 会在android加载每一个apk后执行public void handleLoadPackage(Load…

Servlet防止页面被客户端缓存

服务器端的HttpServlet可通过设置特定HTTP响应头来禁止客户端缓存网页&#xff0c;以下示范代码中的response变量引用HttpServletResponse对象&#xff1a; response.addHeader("Pragma","no-cache"); response.setHeader("Cache-Control","…

二进制存储图片

二进制存储图片 如果我们要将一个图片文件二进制于数据库中&#xff0c;那么我们就必须将图片文件转化为二进制数据内容&#xff0c;再将二进制数据存储至数据库中&#xff0c;这是图片存储&#xff08;或是其它文件数据库存储&#xff09;的基本原则。 至于要从数据库中读取图…

《HTML5开发手册》——2.4 初学者“菜谱”:使用address元素提供通信信息

本节书摘来自异步社区《HTML5开发手册》一书中的第2章&#xff0c;第2.4节,作者&#xff1a; 【美】Chuck Hudson , 【英】Tom Leadbetter 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 初学者“菜谱”&#xff1a;使用address元素提供通信信息 规范中将address…

Matlab与线性代数 -- 矩阵的转置

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

做为程序员对sql进行的性能优化

今天面试&#xff0c;我简历上写了熟悉sql的性能优化&#xff0c;但是今天面试&#xff0c;一时想不起别的&#xff0c;就仅仅说出了一条&#xff0c;在这里再总结一些&#xff0c;完善自己的知识点。 我经常用的数据库是oracle&#xff0c;所以我的sql优化是程序员针对于orac…

asp.NET自定义服务器控件内部细节系列教程四

如大家要转载&#xff0c;请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */四 服务器控件相关元数据Attribute 1.设计期A…

《C++游戏编程入门(第4版)》——1.12 习题

本节书摘来自异步社区出版社《C游戏编程入门&#xff08;第4版&#xff09;》一书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a;【美】Michael Dawson&#xff08;道森&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.12 习题 C…

Matlab与线性代数 -- 单位矩阵

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

语句覆盖(Statement coverage)

一、语句覆盖(Statement coverage)“语句覆盖”是一个比较弱的测试标准&#xff0c;它的含义是&#xff1a;选择足够的测试用例&#xff0c;使得程序中每个语句至少都能被执行一次。 图6.4是一个被测试的程序&#xff0c;它的源程序…

RSS原理和实现

RSS是在互联网上被广泛采用的内容包装和投递协议。网络用户可以在客户端借助于支持RSS的新闻工具软件&#xff0c;在不打开网站内容页面的情况下&#xff0c;阅读支持RSS输出的网站内容。 1.RSS文件结构 示例&#xff1a; <?xml version"1.0" encoding"gb23…

consul安装配置使用

2019独角兽企业重金招聘Python工程师标准>>> 环境 centos:7.3 docker:1.12.6 kernel:3.10.0-514.6.1.el7.x86_64 consul:0.8.1 server1:10.1.13.221 server2:10.1.13.222 consul的功能 服务发现 健康检查 支持多数据中心 key/value存储 consul的使用场景 docker实例…

Matlab与线性代数 -- 全1矩阵

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

java 冒泡排序和快速排序 实现

面试的时候经常会遇到面试官让你直接手写排序算法&#xff0c;下面是冒泡排序和快速排序的实现。冒泡排序基本流程就是&#xff0c;自下而上比较相邻的两个元素进行比较&#xff0c;让大的元素往下面沉&#xff0c;较小的往上冒。按照排序规则进行比较&#xff0c;如果是跟排序…

Matlab与线性代数 -- 零矩阵

打磨一项技能最需要的就是耐心&#xff0c;我们知道做一件事情不会一蹴而就&#xff0c;需要长时间的积累。关于Matlab的打磨会持续很长的时间&#xff0c;每天学习一个知识点&#xff0c;一年下来就不得了。要有耐心&#xff0c;要有耐心&#xff0c;跟着我们每天花5分钟的时间…

全球15个顶级技术类博客

1) 生活骇客&#xff08;Lifehacker&#xff09; http://www.lifehacker.com 生活骇客&#xff08;Lifehacker&#xff09;的座右铭表达了它的全部理念&#xff1a;“不要为技术而生活&#xff0c;要为生活而关注技术&#xff01;”这个博客提供了有关于各方各面的“时间节省”…

[ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标

本文地址&#xff1a;http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者&#xff1a;sushengmiyan-------------------------------------------------资源链接--------------------------------------------------------FontAwesome glyph编码&#xff1a;…

正则式高人谈解答正则式的心得

条件1&#xff1a; 长度为14个字符 条件2&#xff1a; 其中任意9个位置为数字&#xff0c;并且数字只能是(0,1,3) 条件3&#xff1a; 其余的位置全部为"-"符号 ------------------------------------------ 求一个正则表达式 答案为&#xff1a;^(?!(.*?-){6,})(?…