วัตถุฟังก์ชั่นใน JS เป็นสิ่งที่น่าสนใจ แต่มักจะสับสนเพราะมันยืดหยุ่นเกินไป
ให้ฉันแสดงตัวอย่างโค้ดก่อน
var scope = "global"; function constructFunction () {var scope = "local"; return function ใหม่ ("return scope");} constructFunction () () (); ฟังก์ชัน ConstructFunction2 () {var scope = "local"; return function () {return scope;}} constructFunction2 () ();ความรู้สึกแรกของคุณคืออะไรเมื่อคุณเห็นสองสิ่งนี้? ทั้งหมดกลับมา "ท้องถิ่น"? - หากเป็นกรณีนี้คุณจะต้องดูคำอธิบายด้านล่างอย่างใกล้ชิด ConstructFunction2 () ควรเข้าใจการปิดและฉันจะไม่เข้าไปดูรายละเอียดที่นี่ ต่อไปฉันจะมุ่งเน้นไปที่สถานการณ์ของ StructFunction ()
ฟังก์ชั่น () ตัวสร้างถูกใช้ที่นี่ แม้ว่าตัวสร้าง () ตัวสร้างไม่ได้ใช้กันทั่วไป แต่ก็ยังจำเป็นต้องเข้าใจ
ไม่ว่าจะเป็นคำสั่งนิยามฟังก์ชั่นหรือนิพจน์เชิงปริมาณโดยตรงคำจำกัดความของฟังก์ชั่นจะต้องใช้คำหลัก () ฟังก์ชัน ฟังก์ชั่นเดียวสามารถกำหนดโดยตัวสร้างฟังก์ชัน () เช่น::
var f = ฟังก์ชั่นใหม่ ("x", "y", "return x*y");เอฟเฟกต์จริงของบรรทัดนี้เทียบเท่ากับบรรทัดของรหัสต่อไปนี้
var f = function (x, y) {x*y};ฟังก์ชั่น () ตัวสร้างสามารถผ่านในจำนวนของอาร์กิวเมนต์สตริงและข้อความที่แสดงโดยอาร์กิวเมนต์สุดท้ายคือร่างกายฟังก์ชัน; มันสามารถมีคำสั่ง JavaScript ใด ๆ และแต่ละคำสั่งจะถูกหารด้วยเครื่องหมายอัฒภาค สตริงอาร์กิวเมนต์อื่น ๆ ทั้งหมดที่ผ่านเข้าสู่ตัวสร้างคือสตริงที่ระบุชื่อของฟังก์ชัน หากฟังก์ชั่นที่กำหนดไม่มีพารามิเตอร์ใด ๆ เพียงส่งผ่านฟังก์ชันสตริงไปยังตัวสร้าง
มีหลายจุดที่ให้ความสนใจเป็นพิเศษเกี่ยวกับฟังก์ชั่น () ตัวสร้าง:
1. function () ตัวสร้างอนุญาตให้ JavaScript สร้างและรวบรวมฟังก์ชั่นแบบไดนามิกที่รันไทม์
2. ทุกครั้งที่เรียกใช้ฟังก์ชัน () ตัวสร้างจะเรียกว่าร่างกายฟังก์ชั่นจะถูกแยกวิเคราะห์และวัตถุฟังก์ชั่นใหม่จะถูกสร้างขึ้น หากตัวสร้างนี้ดำเนินการในลูปหรือการโทรหลายครั้งประสิทธิภาพการดำเนินการจะได้รับผลกระทบ ในทางตรงกันข้ามฟังก์ชั่นซ้อนกันและนิยามนิยามฟังก์ชั่นในลูปจะไม่ถูกคอมไพล์ใหม่ทุกครั้งที่ดำเนินการ
2. จุดสุดท้ายยังเป็นจุดสำคัญมากเกี่ยวกับตัวสร้าง () ตัวสร้างนั่นคือฟังก์ชั่นที่สร้างขึ้นไม่ได้ใช้ขอบเขตคำศัพท์ ในทางตรงกันข้ามการรวบรวมรหัสร่างกายฟังก์ชั่นจะถูกเรียกใช้งานที่ฟังก์ชันระดับบนสุดเสมอ หลังจากอ่านสิ่งนี้ฟังก์ชั่นด้านบน ConstructFunction () (); ควรเข้าใจง่ายที่จะกลับ "ทั่วโลก" หรือไม่?
ข้างต้นคือตัวสร้างฟังก์ชัน JS () ที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!