例行声明:接下来的文字内容所有来自 Understanding ECMAScript 6,做者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for Web Developers(《JavaScript高级程序设计》)的做者。我很喜欢他的写做风格,因此在看了Understanding ECMAScript 6后试着本身写篇博客梳理一下,至关于简单地翻译和巩固一下吧。在此特别感谢Nicholas的原创,我只是一个小矮人,站在巨人的肩膀上,因此看到了本来看不到的风景。
原文连接:https://leanpub.com/understan...es6
1: 什么是箭头函数?
箭头函数,顾名思义就是用箭头(=>来定义的函数,不会用到关键字‘function’),例如:函数
let sum = (a, b)=> {return a + b;}
效果等同于:this
var sum = function(a, b){return a + b;}
可是,事实上上面两个function存在不少不一样,会在以后的第三点讲解。prototype
2: 箭头函数的多种定义方式
箭头函数的定义形式有不少种(这也是我不喜欢的一点,呵呵),具体的有:翻译
1: 什么状况下均可以型设计
let sum = (a, b)=>{return a + b;} 这种是最经常使用,最通用的形式。
2: 只有一个参数型code
let self = num1 => {return num1;} 能够看到相对第一种定义的区别是:没有用()包围参数. 这种形式只能够在这种状况下用。
3: 没有参数型生命周期
let functionA = ()=> {return 'hehe';} 当没有参数时,必需要有'()'。
4: 两个参数及其以上型ip
let sum = (a, b) => {return a + b;} 当有两个及其以上的参数时,也必需要用‘()’把参数括起来。
5:没有return&&没有{}get
let sum = (a, b) => a + b; 你能够同时不给return关键字和{},效果`等同`于上面的第4种状况
6: 没有return && 有{}
let sum = (a, b)=> {a + b;} 这种状况不等于第5种,这种状况下`'a+b'`并不会做为这个函数的返回值,若是你调用这个函数,获得的结果`‘undefined’`
7: 有return && 没有{}
let sum = (a, b)=> return a + b; 不要做死,这种写法直接给你一个syntaxError.
注明,以上的第5,6,7点针对的是函数方法体的部分,不论函数参数是几个,结果没有区别;一样的,第2,3,4点针对的是函数的参数部分,不论函数的方法体怎么写,对结果没有影响。
3: 箭头函数和通常的非箭头函数的区别:
1: 没有this, super, arguments和new.target绑定。一个箭头函数里面的这几个指由包含它的最近的非箭头函数决定 2: 不能使用new来调用。由于箭头函数没有构造方法。 3: 没有[prototype]属性。由于不能new一个箭头函数,因此prototype也不必有了。 4: 不能改变this的值。this的值在这个箭头函数的整个生命周期里面都不变。 5: 没有arguments。你必须经过命名参数和剩余参数去获取箭头函数的参数。 6: 不能有重名参数。非箭头函数在非严格模式下面能够有重名参数。