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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP