มีหลายวิธีในการเรียกฟังก์ชัน JS:
(1) เรียกฟังก์ชันชื่อโดยตรง
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น foo ()
-
-
foo ();
(2) ฟังก์ชั่นที่ไม่ระบุชื่อถูกเรียกโดยอ้างอิง
การคัดลอกรหัสมีดังนี้:
fooref = ฟังก์ชั่น ()
-
-
fooref ();
(3) การโทรฟังก์ชั่นที่ไม่ระบุชื่อโดยไม่มีการอ้างอิง 1
การคัดลอกรหัสมีดังนี้:
(การทำงาน()
-
-
(4) การโทรฟังก์ชั่นที่ไม่ระบุชื่อโดยไม่ต้องอ้างอิง 2
การคัดลอกรหัสมีดังนี้:
(การทำงาน()
-
-
(5) การโทรฟังก์ชั่นที่ไม่ระบุชื่อโดยไม่ต้องอ้างอิง 3
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นโมฆะ ()
-
-
รูปที่ 1.1 และรูปที่ 1.2 แสดงว่ากระบวนการดำเนินการของนิพจน์ทั้งสองนี้แตกต่างกัน ในรูปที่ 1.1 ตัวดำเนินการที่ถูกบังคับใช้เพื่อเปิดใช้งานการดำเนินการเรียกใช้ฟังก์ชันที่จะดำเนินการ ในรูปที่ 1.2 ตัวดำเนินการที่ถูกบังคับใช้เพื่อใช้งานนิพจน์ "ฟังก์ชั่นการประกาศปริมาณโดยตรง" และส่งคืนการอ้างอิงไปยังฟังก์ชั่นเองจากนั้นการอ้างอิงฟังก์ชั่นจะดำเนินการผ่านการดำเนินการเรียกใช้ฟังก์ชัน "()" ฟังก์ชั่นที่ไม่ระบุชื่อสุดท้ายด้านบนเรียกฟังก์ชันโมฆะ () {} (); ใช้เพื่อเรียกใช้ฟังก์ชันและละเว้นค่าส่งคืน โมฆะผู้ปฏิบัติงานใช้เพื่อสร้างนิพจน์ฟังก์ชั่นที่ตามมาดำเนินการ หากเราไม่ใช้ "โมฆะ" และการดำเนินการบังคับ "()" รหัสจะถูกเรียกใช้งานได้:
(1) function () {} () // use '' () "เพื่อบังคับการโทร
(2) ฟังก์ชัน () {} (); //ใช้ ";" เพื่อดำเนินการคำสั่ง
เอ็นจิ้นสคริปต์จะคิดว่าฟังก์ชั่น () {} เป็นฟังก์ชันการประกาศเพื่อให้ไม่สามารถผ่านการตรวจจับไวยากรณ์และรหัสถูกแยกวิเคราะห์เช่นนี้:
การทำงาน(){};();
function () {} ถูกตีความว่าเป็นการประกาศในขณะที่ "();" ถูกตีความอย่างอิสระเป็นบรรทัดดังนั้นจะมีการรายงานข้อผิดพลาดทางไวยากรณ์ ทำไมคุณถึงรู้ว่ามันเป็นข้อผิดพลาดที่เกิดจาก "();"? เราเปลี่ยนเป็นรหัสต่อไปนี้:
ฟังก์ชัน () {} (1);
เครื่องยนต์จะอธิบายได้ว่า:
fucntion () {};
(1); // นิพจน์ค่าเดียว
ดังนั้นการตรวจจับไวยากรณ์จึงผ่านไป ...