ตาม MDN นิพจน์ฟังก์ชันลูกศรเป็นการกระชับทางวากยสัมพันธ์ทางเลือกกับนิพจน์ฟังก์ชันปกติ แม้ว่าจะไม่มีการผูกมัดกับสิ่งนี้ อาร์กิวเมนต์ super หรือ new.target คีย์เวิร์ดก็ตาม นิพจน์ฟังก์ชันลูกศรไม่เหมาะกับเมธอด และไม่สามารถใช้เป็นตัวสร้างได้
ฟังก์ชันปกติและฟังก์ชันลูกศรมีความแตกต่างกัน 3 อย่างใน JavaScript
-
ไม่มีความผูกพันนี้
ฟังก์ชันลูกศรไม่มีค่าของตัวเอง ค่านี้ภายในฟังก์ชันลูกศรจะสืบทอดมาจากขอบเขตที่ล้อมรอบเสมอ
ตัวอย่าง
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
ดูว่าฟังก์ชันลูกศรเปลี่ยนวัตถุนี้นอกขอบเขต ฟังก์ชันปกติเพิ่งทำการเปลี่ยนแปลงภายในตัวของมันเอง
- ฟังก์ชัน Arrow ไม่มีอาร์เรย์อาร์กิวเมนต์ ในอาร์กิวเมนต์ JS อาร์เรย์ในฟังก์ชันเป็นอ็อบเจ็กต์พิเศษที่สามารถใช้เพื่อรับอาร์กิวเมนต์ทั้งหมดที่ส่งผ่านไปยังฟังก์ชันได้ ในทำนองเดียวกัน ฟังก์ชันลูกศรไม่ได้ผูกกับออบเจกต์อาร์กิวเมนต์ของตัวเอง แต่จะผูกกับอาร์กิวเมนต์ของขอบเขตที่ล้อมรอบ
- ฟังก์ชัน Arrow สามารถเรียกใช้ได้ แต่ไม่สามารถสร้างได้ หากฟังก์ชันนั้นสร้างได้ ก็สามารถเรียกใช้ฟังก์ชันใหม่ได้ เช่น new User() หากฟังก์ชันสามารถเรียกใช้ได้ ก็สามารถเรียกได้โดยไม่ต้องมีการเรียกใช้ฟังก์ชันใหม่ (เช่น การเรียกใช้ฟังก์ชันปกติ)
ฟังก์ชันที่สร้างจากการประกาศ/นิพจน์ของฟังก์ชันมีทั้งแบบสร้างได้และเรียกได้
ฟังก์ชันลูกศร (และวิธีการ) สามารถเรียกได้เท่านั้น ตัวสร้างคลาสนั้นสร้างได้เท่านั้น
หากคุณกำลังพยายามเรียกใช้ฟังก์ชันที่ไม่สามารถเรียกได้หรือเพื่อสร้างฟังก์ชันที่ไม่สร้างสรรค์ คุณจะได้รับข้อผิดพลาดรันไทม์
ตัวอย่าง
let arrowFunc = () => {} new arrowFunc()
ผลลัพธ์
รหัสนี้ทำให้เกิดข้อผิดพลาด -
arrowFunc is not a constructor