JavaScript中普通函式和箭頭函式的區別


根據MDN文件,箭頭函式表示式是普通函式表示式的一種語法上更簡潔的替代方案,但它沒有自己的`this`、`arguments`、`super`或`new.target`關鍵字繫結。箭頭函式表示式不適合用作方法,也不能用作建構函式。

JavaScript中普通函式和箭頭函式有三個細微的區別。

沒有自己的`this`繫結

箭頭函式沒有自己的`this`值。箭頭函式內部的`this`值總是繼承自封閉作用域。

示例

this.a = 100;
let arrowFunc = () => {this.a = 150};
function regFunc() {
   this.a = 200;
}
console.log(this.a)
arrowFunc()
console.log(this.a)
regFunc()
console.log(this.a)

輸出

100
150
150

可以看到,箭頭函式改變了其作用域之外的`this`物件。普通函式只在其自身的`this`內部進行了更改。

箭頭函式沒有`arguments`陣列

在JS中,函式中的`arguments`陣列是一個特殊的物件,可以用來獲取傳遞給函式的所有引數。與之類似,箭頭函式沒有自己對`arguments`物件的繫結,它們繫結到封閉作用域的引數。

箭頭函式是可呼叫的,但不可構造的

如果一個函式是可構造的,它可以用`new`呼叫,例如`new User()`。如果一個函式是可呼叫的,它可以不用`new`呼叫(即普通函式呼叫)。

透過函式宣告/表示式建立的函式既可構造又可呼叫。

箭頭函式(和方法)僅可呼叫。類建構函式僅可構造。

如果您嘗試呼叫不可呼叫的函式或構造不可構造的函式,將會得到執行時錯誤。

let arrowFunc = () => {}
new arrowFunc()
This code gives the error:
arrowFunc is not a constructor

更新於:2019年9月16日

672 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.