• 很大程度上,箭头函数实例化的函数对象与正式的函数表达式创建的函数对象行为是相同的。
  • 箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数
1
2
3
4
5
6
7
8
let arrowSum = (a, b) => { 
return a + b;
};
let functionExpressionSum = function(a, b) {
return a + b;
};
console.log(arrowSum(5, 8)); // 13
console.log(functionExpressionSum(5, 8)); // 13
  • 箭头函数简洁的语法非常适合嵌入函数的场景:
1
2
3
let ints = [1, 2, 3]; 
console.log(ints.map(function(i) { return i + 1; })); // [2, 3, 4]
console.log(ints.map((i) => { return i + 1 })); // [2, 3, 4]
  • 如果只有一个参数,可以不用括号。
  • 只有没有参数,或者多个参数的情况下,才需要使用括号。
1
2
3
4
5
6
7
8
9
// 以下两种写法都有效
let double = (x) => { return 2 * x; };
let triple = x => { return 3 * x; };
// 没有参数需要括号
let getRandom = () => { return Math.random(); };
// 多个参数需要括号
let sum = (a, b) => { return a + b; };
// 无效的写法:
let multiply = a, b => { return a * b; };
  • 箭头函数也叫以不用大括号,但这样会改变函数的行为。
  • 使用大括号就说明包含“ 函数体”,可以在一个函数中包含多条语句,跟常规的函数一样;
  • 如果不使用大括号,那么箭头后面就只能有一行代码
1
2
3
4
5
6
7
8
9
10
// 以下两种写法都有效,而且返回相应的值
let double = (x) => { return 2 * x; };
let triple = (x) => 3 * x;
// 可以赋值
let value = {};
let setName = (x) => x.name = "Matt";
setName(value);
console.log(value.name); // "Matt"
// 无效的写法:
let multiply = (a, b) => return a * b;
  • 箭头函数不能使用arguments、super和new.target,也不能用作构造函数,箭头函数没有prototype属性。