箭头函数用=>
来代表一个函数。同时支持函数体为表达式(expression bodies)和语句(statement bodies)的写法。
值得注意的是,与一般函数不同,箭头函数与包裹它的代码共享相同的this
对象,如果箭头函数在其他函数的内部,它也将共享该函数的arguments
变量。
1 | // Expression bodies |
基本用法
1 | var f = v => v; |
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分:1
2
3
4
5
6
7
8
9var f = () => 5;
// 等同于
var f = function () { return 5 };
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
如果箭头函数的代码块部分多于一条语句,就需要使用大括号将它们括起来,并使用return
语句返回:1
2
3
4
5
6
7var sum = (num1, num2) => {
if (typeof num1 == 'number' && typeof num2 == 'number') {
return num1 + num2;
} else {
return 0;
}
}
由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上一个小括号,否则会报错:1
2
3
4
5// 报错
let getTempItem = id => { id: id, name: "Temp" };
// 不报错
let getTempItem = id => ({ id: id, name: "Temp" });
箭头函数可以与变量结构结合使用:1
2
3
4
5
6const full = ({ first, last }) => first + ' ' + last;
// 等同于
function full(person) {
return person.first + ' ' + person.last;
}
箭头函数的一个用处是简化回调函数:1
2
3
4
5
6
7// 正常函数写法
[1,2,3].map(function (x) {
return x * x;
});
// 箭头函数写法
[1,2,3].map(x => x * x);
1 | // 正常函数写法 |