浅谈 es6 箭头函数, reduce函数介绍
今天来谈一下箭头函数, es6的新特性
首先我们来看下箭头函数长什么样子,
let result = (param1, param2) => param1+param2;
上述代码 按照以前书写应该是 :
function add(param1, param2){
return param1+param2;
}
当 只有一个参数时,还可以简写为:
let result = v => 5+v;
箭头函数不支持 arguments
当有多个参数时,比如10个参数时, 我们就不能用arguments了,一种方法是 一一列举出来,比较繁琐, 还有一种方法是 用剩余参数表示 如下:
这里先解释一下 ” 剩余参数 “, MDN这样描述: 如果函数的最后一个命名参数以...为前缀,则在函数被调用时,该形参会成为一个数组,数组中的元素都是传递给该函数的多出来的实参的值。
(param1, param2, ...rest)=>{//code} //...rest类型为数组,不包含param1,param2, rest.length表示剩余参数个数
arg代表的是 数组[3,6,5]
之前没用箭头函数写promise时,代码如下
function getRankData(){
return getUsers(users)
.then(function(users){return users[1];})
.then(function(user){return user.id;})
.then(function(id){return data;})
.catch(function(err){return err.msg;})
}
用箭头函数简化后,
function getUserRankData(){
return getUsers(users)
.then(users => users[1];)
.then(user => user.id)
.then(id => data)
.then(err => err.msg;);
}
当没有参数时, 箭头函数 () => {//code} 或者 _ => {//code}
note: 简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法。
当 用箭头函数直接返回一个对象的时候 ()=>{name: 'test'} 会报错 , 需要添加一个括号, () => ({name: 'test'});
this 关键字
箭头函数内部的this是词法作用域,由上下文确定。
看到箭头函数 经常和高阶函数一起使用, 如下
高阶函数有两个特性 : 函数可以作为参数传递, 函数可以作为返回值输出
var arr = [1,3,5,2,0];
var num = arr.map(ele => ele + 1)
.filter(ele => ele > 3)
.reduce((acc, ele) => acc + ele, 0)
结果为10;
介绍一下 reduce函数,对数组每个元素执行回调函数,返回值用于下一次计算参数,
reduce(function(a,b,c,d) , 0); reduce 有两个参数 一个回调函数,一个参数, 当参数存在时, 即为a 的初始值, 之后a为回调返回的值, b为数组当前的元素, c为当前元素序号值, d为调用reduce的数组。
浅谈 es6 箭头函数, reduce函数介绍的更多相关文章
- 浅谈ES6中的Async函数
转载地址:https://www.cnblogs.com/sghy/p/7987640.html 定义:Async函数是一个异步操作函数,本质上,Async函数是Generator函数的语法糖.asy ...
- 浅谈ES6原生Promise
浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...
- 浅谈JS中的高级函数
在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅如此,还能被一个函数返回!可以说,在JS中,函数无处不在,无所不能,堪比孙 ...
- 浅谈python中的闭包函数
闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ...
- 浅谈JS变量声明和函数声明提升
先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按 ...
- MYSQL优化浅谈,工具及优化点介绍,mysqldumpslow,pt-query-digest,explain等
MYSQL优化浅谈 msyql是开发常用的关系型数据库,快速.稳定.开源等优点就不说了. 个人认为,项目上线,标志着一个项目真正的开始.从运维,到反馈,到再分析,再版本迭代,再优化… 这是一个漫长且考 ...
- python map函数 reduce函数
Python中map()函数浅析 函数式编程: 更好的描述问题 map函数 怎么理解当传入多个参数list时,map如何运作: abc函数第一次传入的数据时 (11,44,77),然后(22,5 ...
- 浅谈C中操作字符串函数的用法(一)
按照内核string.h中函数的顺序进行大概的介绍,若干函数会给出一个简单的例子.有不足之处还希望各位看到的留言告知. 一.memcpy: 函数原型:extern void * memcpy(void ...
- 【C语言】浅谈可变参数与printf函数
一.何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用& ...
随机推荐
- core项目打包时发现有的项目的xml文件不会被打包进去,怎么办?
我打包后发现打包后的文件夹内,不存在xml文件,所以swagger加载失败:然后经过测试发现Core项目打包的时候是默认不包含Xml文件的,VS里面也没有办法设置. 解决方法:手动修改项目文件,找到你 ...
- java 传入用户名和密码并自动提交表单实现登录到其他系统
不用单点登录,模拟远程项目的登录页面表单,在访问这个页面的时候自动提交表单到此项目的登录action,就可以实现登录到其他系统. ssh框架项目 1.以下是本地系统的action代码: import ...
- UDP及操作系统理论
UDP介绍 udp协议又称用户数据报协议 在OSI七层模型中,它于TCP共同存在于传输层 仅用于不要求可靠性,不要求分组顺序且数据较小的简单传输,力求速度 UDP结合socket用法 1.创建sock ...
- C和指针--预处理器
编译一个C程序的第1个步骤是预处理(preprocessing)阶段.C预处理器在源代码编译之前对其进行一些文本性质的操作.它的主要任务包括删除注释.插入被#include指令包含的文件的内容.定义和 ...
- 深度解析Graph Embedding
Graph Embedding是推荐系统.计算广告领域最近非常流行的做法,是从word2vec等一路发展而来的Embedding技术的最新延伸:并且已经有很多大厂将Graph Embedding应用于 ...
- BZOJ 3716 [PA2014]Muzeum 贪心SET最大闭合子图
看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍 ...
- Java8-Lock-No.01
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...
- 2019牛客暑期多校训练营(第七场)D Number——实系数多项式因式分解定理
前置知识 代数基本定理 定理:每个次数 ≥ 1 复系数多项式在复数域中至少有一个跟. 由此推出,n次复系数多项式方程在复数域内有且只有n个根(重根按重数计算).(只要不断把多项式除以(x-xa),即可 ...
- 5、获取Class中的字段
5.获取Class中的字段 5.1 getField(String name) 只获取共有的字段 返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 类对象. /** * 获取字节码文 ...
- MyBankgon功能
.帐户类 User 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...