ES6 允许使用“箭头”(=>)定义函数。
1 | var f = v => v; |
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
1 | var f = () => 5; |
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
1 | var sum = (num1, num2) => { return num1 + num2; } |
由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
1 | // 报错 |
箭头函数可以与变量解构结合使用。
1 | const full = ({ first, last }) => first + ' ' + last; |
箭头函数使得表达更加简洁。
1 | const isEven = n => n % 2 === 0; |
箭头函数的一个用处是简化回调函数。
1 | // 正常函数写法 |
下面是 rest 参数与箭头函数结合的例子。
1 | const numbers = (...nums) => nums; |
箭头函数有几个使用注意点。
-
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
-
不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
-
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
-
不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。
箭头函数出现的原因:
- 为了更好的使用
this
,this
是call 的第一个参数,你不能确定他的值。使用js语言通常会考虑this
的值到底是什么,声明一个函数,函数里面的this和外面this不一样,我们可能会用bind
方法,或者在函数外保存this
的值(let self=this
)。箭头函数就是为了解决这个问题,一般函数都可以通过call
来改变this
的值,箭头函数并不会,即使你传入this
,他也不会接收。
本文参考:http://es6.ruanyifeng.com/#docs/function#箭头函数