函数是 JavaScript 中的主要数据结构之一,它们一直都存在于 Javascript 中。
箭头函数
ES6 引入了一种新的函数,叫做箭头函数。箭头函数和普通函数的行为非常相似,但是在语法构成上非常不同。以下代码列出一组名字,使用普通函数把其中每个名字转换为大写形式:
const upperizedNames = ['Farrin', 'Kagure', 'Asser'].map(function(name) {
return name.toUpperCase();
});
下面的代码操作一样,但是向 map() 方法中传入的是箭头函数,而不是普通函数。注意以下代码中箭头函数的箭头 (=>):
const upperizedNames = ['Farrin', 'Kagure', 'Asser'].map(
name => name.toUpperCase()
);
上述代码的唯一变化是 map() 方法内的代码。它将普通函数换成了箭头函数。
注意: 不知道 map() 的原理?它是 Array 原型上的方法。向其传递一个函数,它会对数组中的每个元素调用该函数。然后从每个函数调用中收集返回的值,并生成新的数组。要了解详情,请参阅 MDN 的文档。
将函数转换为箭头函数
const upperizedNames = [‘Farrin’, ‘Kagure’, ‘Asser’].map(function(name) {
return name.toUpperCase();
});
对于上述函数,将现有的”普通”函数转换为箭头函数只需几步。
- 删掉关键字 function
- 删掉圆括号
- 删掉左右花括号
- 删掉关键字 return
- 删掉分号
- 在参数列表和函数主体之间添加一个箭头(=>)
普通函数可以是函数声明或函数表达式,但是箭头函数始终是表达式。实际上,它们的全称是“箭头函数表达式”,因此仅在表达式有效时才能使用,包括:
存储在变量中,
当做参数传递给函数,
*存储在对象的属性中。
一个令人迷惑的语法是箭头函数存储在变量中。
const greet = name => `Hello ${name}!`;
在上述代码中,箭头函数存储在变量 greet 中,你可以像以下代码这样调用它:
greet('Asser');
Returns: Hello Asser!
#####圆括号和箭头函数参数
你可能注意到了 greet() 函数的箭头函数看起来如下所示:
name => `Hello ${name}!`
如果你还记得,参数列表出现在箭头函数的箭头(即 =>)前面。如果列表中只有一个参数,那么可以像上述示例那样编写代码。但是,如果列表中有两个或多个参数,或者有零个,则需要将参数列表放在圆括号内:
// empty parameter list requires parentheses
const sayHi = () => console.log('Hello Udacity Student!');
sayHi();
Prints: Hello Udacity Student!
// multiple parameters requires parentheses
const orderIceCream = (flavor, cone) =>
console.log(`Here's your ${flavor} ice cream in a ${cone} cone.`);
orderIceCream('chocolate', 'waffle');
Prints: Here’s your chocolate ice cream in a waffle cone.
#####简写主体语法和常规主体语法
我们看过的所有箭头函数都只有一个表达式作为函数主体:
const upperizedNames = ['Farrin', 'Kagure', 'Asser'].map(
name => name.toUpperCase()
);
这种函数主体形式称为”简写主体语法”。简写语法:
在函数主体周围没有花括号
自动返回表达式。
如果箭头函数的主体内需要多行代码,则可以使用”常规主体语法”。
const upperizedNames = ['Farrin', 'Kagure', 'Asser'].map( name => {
name = name.toUpperCase();
return `${name} has ${name.length} characters in their name`;
});
对于常规主体语法需要记住的重要事项:
- 它将函数主体放在花括号内
- 需要使用 return 语句来返回内容。
#####箭头函数很强大!
- 语法简短多了,
更容易编写和阅读的简短单行函数,
*使用简写主体语法时,自动返回内容!
#####警告:事情并非总是很完美,有些时候你可能不想使用箭头函数。在忘记如何编写普通函数之前,先看看下面的限制:箭头函数中的 this 关键字存在限制条件
箭头函数只是表达式
- 没有箭头函数声明