箭頭函數(Arrow Function)
箭頭函數是 ES6 中新增的一種函數形式,它是一個簡潔、精簡的語法,可以幫助我們更方便地定義函數。
基本語法
箭頭函數的基本語法如下:
// 無參數的箭頭函數
const func1 = () => {
// 函數體
}
// 單參數的箭頭函數
const func2 = x => {
// 函數體
}
// 多參數的箭頭函數
const func3 = (x, y) => {
// 函數體
}
特點
1. 簡潔
箭頭函數可以讓我們用更簡潔的語法來定義函數,不需要再寫 function 關鍵字和花括號。
2. 隱式返回值
當函數只有一條語句時,箭頭函數可以省略花括號和 return 關鍵字,自動返回該語句的結果。
// 傳統函數
function add(x, y) {
return x + y;
}
// 箭頭函數
const add = (x, y) => x + y;
3. 靜態綁定 this
箭頭函式中的 this 指向為宣告時的作用域內 this 指向,不會像傳統函式一樣因為呼叫方式的不同而改變 this 指向。
const person = {
name: 'Alice',
age: 20,
sayHi: function () {
console.log(`Hi, my name is ${this.name}.`);
},
sayHiArrow: () => {
console.log(`Hi, my name is ${this.name}.`);
},
};
person.sayHi(); // Hi, my name is Alice.
person.sayHiArrow(); // Hi, my name is undefined.\
在這個例子中,sayHiArrow 的 this 指向的是定義時的作用域,也就是全域物件 (global object)。因此,在箭頭函式內部的 this.name 會回 傳 undefined。
注意事項
除了上面提到的 this 以外,箭頭函數還有一些注意事項需要特別注意:
- 箭頭函數不能用作 constructor(建構函數),不能使用
new關鍵字呼叫,否則會拋出錯誤。 - 箭頭函數不能被運用在
call、apply、bind中,因為箭頭函數沒有自己的 this,這些方法改變 this 的方式在箭頭函數中是無效的。 - 在箭頭函數中,不可以使用
arguments,arguments關鍵字被繫結到父級函數的argumentsobject中,而不是繫結到箭頭函數本身的 arguments 中,如果要用,可以用rest參數代替。。 - 在箭頭函數中,不能使用
yield關鍵字,因為箭頭函數是沒有自己的this和arguments的,所以不能作為generator函數使用。
箭頭函數常見的誤用
箭頭函數的誤用主要是跟 this 的誤解有關,以下是幾個常見的誤用: