1 基本用法
箭头函数是ES6中被应用的最广泛的语法之一了,关键在于其形式简单:
var f = v => v;
上面的箭头函数等同于:
var f = function(v) {
return v;
};
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var f = () => 5;
// 等同于
var f = function () {
return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
箭头函数的一个用处是简化回调函数。
// 正常函数写法
[1,2,3].map(function (x) {
return x * x;
});
// 箭头函数写法
[1,2,3].map(x => x * x);
下面是 rest 参数与箭头函数结合的例子
const numbers = (...nums) => nums;
numbers(1, 2, 3, 4, 5)
// [1,2,3,4,5]
const headAndTail = (head, ...tail) => [head, tail];
headAndTail(1, 2, 3, 4, 5)
// [1,[2,3,4,5]]
2.使用注意点
1)函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象(this对象的指向是可变的,但是在箭头函数中它是固定的)
2)不可以当做构造函数,即不可以使用new命令,否则会报错
3)不可以使用arguments对象,该对象在函数体内不存在。可以用rest参数代替
4)不可以使用yield命令,因此箭头函数不能用作Generator函数
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
var id = 21;
foo.call({ id: 42 });
// id: 42
上面的代码中,setTimeout的参数是一个箭头函数,100ms后执行,如果是普通函数,执行时this应该指向全局对象,但是箭头函数导致this总是指向函数所在的对象
除了this,以下三个变量在箭头函数中也是不存在的,分别指向外层函数的对应变量:
arguments、super和new.target
另外,由于箭头函数没有自己的this,当然也就不能用call(),apply(),bind()这些方法去改变this的指向。
附链接:阮老师的JavaScript的this原理,JavaScript的this用法
3 嵌套的箭头函数