Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ฟังก์ชันลูกศรใน Javascript


ตาม 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