ฟังก์ชั่นเป็นวัตถุที่ยืดหยุ่นที่สุดใน JavaScript ที่นี่เราเพิ่งอธิบายจุดประสงค์ของฟังก์ชั่นที่ไม่ระบุชื่อ ฟังก์ชั่นที่ไม่ระบุชื่ออ้างถึงฟังก์ชั่นที่ไม่ได้ระบุชื่อฟังก์ชันหรือพอยน์เตอร์ ฟังก์ชั่นที่ไม่ระบุชื่อที่เปิดเผยตัวเองเป็นเพียงหนึ่งในนั้น ต่อไปนี้เรียกว่าฟังก์ชั่นนี้: ฟังก์ชั่นที่กำลังดำเนินการด้วยตนเอง
นี่คือหนึ่งในฟังก์ชั่นที่ใช้บ่อยที่สุดในตนเอง:
// ฟังก์ชันนิรนามแบบดั้งเดิม (ฟังก์ชั่น () {แจ้งเตือน ('hello');}) ();เอฟเฟกต์การดำเนินการของรหัสนี้คือการปรากฏขึ้นเมื่อหน้าถูกโหลดซ้ำ: "สวัสดี"
อะไรแจ้งให้ดำเนินการโดยอัตโนมัติ? ดูรหัสต่อไปนี้
// ลบวงเล็บในการเขียนแบบดั้งเดิมและเพิ่มตัวดำเนินการ ~,!,+,-~ function () {alert ('hello');} () ;! function () {Alert ('hello');} ();+function () {Alert ('hello');} ();วิธีการเขียนเหล่านี้ไม่แตกต่างจากวิธีการดั้งเดิมที่กล่าวถึงข้างต้น
ฉันพบว่าจุดทั่วไปของวิธีการเขียนเหล่านี้คือผู้ประกอบการ ในความเป็นจริงวิธีดั้งเดิมของวงเล็บ () ยังอยู่ในประเภทของการดำเนินการซึ่งปรากฏใน: a = b*(c+d)
ตัวดำเนินการ + พารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชั่นที่สร้างเอง = จะถูกเรียกใช้งานโดยอัตโนมัติหรือไม่ แต่สัญลักษณ์บางอย่างไม่ได้รับการสนับสนุนเช่นเครื่องหมาย "=, *, /" เหตุผลที่มันดำเนินการตัวเองยังคงลึกลับมากและไม่มีคำตอบที่ดีบนอินเทอร์เน็ต
จากนั้นฉันก็ค้นพบปรากฏการณ์มหัศจรรย์ที่ผู้ให้บริการเหล่านี้สามารถซ้อนทับได้อย่างไม่สิ้นสุด - - - - -
// ฟังก์ชั่นนำหน้าด้วยสัญลักษณ์เฉพาะที่สามารถซ้อนทับได้ อย่างไม่ จำกัด ... ~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~!+-~! - - - - - -
โปรแกรมทำงานตามปกติ !!!!!!
อย่างไรก็ตามมีสองสถานการณ์ที่จะมีการรายงานข้อผิดพลาด
หากสัญลักษณ์สาม "+" หรือ "-" ปรากฏขึ้นอย่างต่อเนื่องจะเกิดข้อผิดพลาดเกิดขึ้น
หากสอง "+" หรือ "-" สัญลักษณ์ปรากฏขึ้นอย่างต่อเนื่องและตามด้วยสัญลักษณ์อื่น ๆ ข้อผิดพลาดจะเกิดขึ้นเช่น "++ ~", "-+";
พรอมต์ข้อผิดพลาด: Uncaught ReferenceError: นิพจน์ด้านซ้ายมือไม่ถูกต้องในการดำเนินการคำนำหน้า (หมายถึงข้อผิดพลาดการแสดงออกทางซ้าย)
จากนั้นฉันใช้สัญลักษณ์เดียวกันเพื่อคำนวณตัวแปรและพบว่ามันเหมือนกันทุกประการ สิ่งนี้อาจอธิบายได้แล้วว่าการดำเนินการของ JavaScript จะแจ้งการดำเนินการอัตโนมัติของฟังก์ชั่นหรือสามารถเข้าใจได้ว่าเป็นการเรียกใช้ฟังก์ชั่นนี้ผ่านการดำเนินการ!
ไม่ใช่ว่าฟังก์ชั่นดำเนินการตัวเอง แต่ฟังก์ชั่นนี้เรียกผ่านการดำเนินการ! แต่รองรับวิธีการคำนวณบางอย่างเท่านั้น!
นอกจากนี้ฟังก์ชั่นการดำเนินการด้วยตนเองนี้อาจไม่ใช่ฟังก์ชั่นที่ไม่ระบุชื่อ! เมื่อดูที่รหัสด้านบนฉันได้กำหนดชื่อฟังก์ชั่น A ในฟังก์ชั่นหลังจากตัวดำเนินการและไม่มีข้อยกเว้น แต่มันก็ไร้ประโยชน์ - -! นี่ยังไม่สามารถเรียกได้ด้วยวิธีอื่น แต่ฉันคิดว่ามันไม่เหมาะสมสำหรับคนจำนวนมากที่เรียกมันว่าเป็นฟังก์ชันที่ไม่ระบุชื่อ!
ข้างต้นเป็นการวิเคราะห์สั้น ๆ เกี่ยวกับหลักการของฟังก์ชั่นนิรนามของ JavaScript ด้วยตนเอง (ฟังก์ชั่น () {}) () แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!