คำจำกัดความของฟังก์ชัน JavaScript
1: เรียกใช้ฟังก์ชันคำหลักเพื่อสร้างเช่น:
ระยะทางฟังก์ชัน (x1, x2, y1, y2)
-
var dx = x2-x1;
var dy = y2-y1;
return math.sqrt (dx*dx+dy*dy);
-
2: ใช้ฟังก์ชั่นการสร้าง Funion ()
var f = ฟังก์ชั่นใหม่*"x", "y", "return x*y");
บรรทัดของรหัสนี้สร้างฟังก์ชั่นใหม่ซึ่งโดยทั่วไปเทียบเท่ากับคำจำกัดความการทำงานของนิยามไวยากรณ์ที่คุณคุ้นเคยกับ:
ฟังก์ชั่น f (x, y)
-
กลับ x*y;
-
ตัวสร้าง functino () สามารถยอมรับพารามิเตอร์สตริงหลายตัว ร่างกายหลักของฟังก์ชั่นในระหว่างพารามิเตอร์สุดท้ายซึ่งสามารถมีคำสั่ง JavaScript ใด ๆ แยกตัวเลขระหว่างคำสั่ง พารามิเตอร์อื่น ๆ ใช้เพื่ออธิบายสตริงของชื่อพารามิเตอร์ฟอร์มที่กำหนดโดยฟังก์ชัน หากคุณกำหนดฟังก์ชั่นที่ไม่มีพารามิเตอร์คุณสามารถผ่านสตริงได้เท่านั้น (นั่นคือหัวเรื่องของฟังก์ชั่น) ไปยังตัวสร้าง
โปรดทราบว่าไม่มีการใช้พารามิเตอร์ใด ๆ ที่ส่งผ่านไปยังฟังก์ชั่นคอนสตรัคเตอร์ () เพื่ออธิบายชื่อฟังก์ชั่นที่จะสร้าง ฟังก์ชั่น USEN -Unnamed ที่สร้างขึ้นโดย Function () ตัวสร้างบางครั้งกลายเป็น "ฟังก์ชั่นที่ไม่ระบุชื่อ"
คุณอาจต้องการทราบว่าฟังก์ชั่นของตัวสร้าง () ใช้งานอย่างไร ทำไมไม่ใช้คำสั่งฟังก์ชั่นเพื่อกำหนดฟังก์ชั่นทั้งหมด? เหตุผลก็คือตัวสร้างฟังก์ชั่น () ช่วยให้เราสามารถสร้างและรวบรวมฟังก์ชั่นแบบไดนามิกซึ่งจะไม่ จำกัด เราไว้ในฟังก์ชันที่รวบรวมไว้ล่วงหน้าโดยคำสั่งฟังก์ชั่น ผลกระทบเชิงลบที่เกิดจากสิ่งนี้คือทุกครั้งที่มีการเรียกฟังก์ชันฟังก์ชัน () ตัวสร้างจะต้องรวบรวม ดังนั้นเราไม่ควรเรียกตัวสร้างนี้บ่อยครั้งในร่างกายลูปหรือในฟังก์ชั่นที่มักใช้
อีกเหตุผลหนึ่งที่ใช้ฟังก์ชั่นการสร้างฟังก์ชัน () มันสามารถกำหนดฟังก์ชั่นเป็นส่วนหนึ่งของการแสดงออกของ JavaScript แทนที่จะกำหนดคำสั่ง
3: ปริมาณโดยตรงฟังก์ชั่น
ฟังก์ชั่นปริมาณโดยตรงเป็นนิพจน์ที่กำหนดฟังก์ชันที่ไม่ระบุชื่อ ไวยากรณ์ของปริมาณฟังก์ชันโดยตรงปริมาณคล้ายกับคำสั่งฟังก์ชัน แต่ใช้เป็นนิพจน์ไม่ใช่คำสั่งและไม่จำเป็นต้องระบุชื่อฟังก์ชัน รหัสสามบรรทัดต่อไปนี้ใช้คำสั่ง function () ฟังก์ชัน () ตัวสร้างและฟังก์ชั่นของฟังก์ชันเพื่อกำหนดสามฟังก์ชันเดียวกันโดยทั่วไป:
ฟังก์ชั่น f (x) {return x*x};
var f = ฟังก์ชั่นใหม่ ("x", "return x*x;");
var f = function (x) {reurn x*x};
แม้ว่าฟังก์ชั่นจะสร้างฟังก์ชั่นที่ไม่มีชื่อโดยตรง แต่ไวยากรณ์ของมันยังกำหนดว่าสามารถระบุชื่อฟังก์ชั่นซึ่งมีประโยชน์มากเมื่อเขียนและเรียกฟังก์ชันเรียกซ้ำของตัวเอง ตัวอย่างเช่น:
var f = ฟังก์ชั่นข้อเท็จจริง (x) {ถ้า (x <= 1) ส่งคืน 1;
รหัสข้างต้นกำหนดฟังก์ชั่นที่ไม่มีชื่อและเก็บไว้ในตัวแปร F สำหรับการอ้างอิง มันไม่ได้สร้างฟังก์ชั่นที่เรียกว่าข้อเท็จจริง () แต่ช่วยให้ฟังก์ชั่นใช้ชื่อเพื่ออ้างตัวเอง อย่างไรก็ตามควรสังเกตว่า JavaScript1.5 เวอร์ชันก่อนหน้านี้ไม่ได้ใช้ฟังก์ชันการทำงานของชื่อนี้อย่างถูกต้อง
การใช้งานฟังก์ชั่นของฟังก์ชั่นนั้นคล้ายกับวิธีการสร้างฟังก์ชันด้วยฟังก์ชันการสร้างฟังก์ชัน () เนื่องจากพวกเขาทั้งหมดถูกสร้างขึ้นโดยการแสดงออกของ JavaScript ไม่ได้สร้างขึ้นโดยคำสั่งวิธีการใช้มันมีความยืดหยุ่นมากขึ้นโดยเฉพาะอย่างยิ่งสำหรับฟังก์ชั่นที่ใช้เพียงครั้งเดียวและไม่จำเป็นต้องตั้งชื่อ ตัวอย่างเช่นฟังก์ชั่นที่ระบุโดยนิพจน์การวัดโดยตรงของฟังก์ชั่นสามารถเก็บไว้ในตัวแปรส่งผ่านไปยังฟังก์ชั่นอื่น ๆ และแม้กระทั่งการโทรโดยตรง:
A [0] = ฟังก์ชั่น (x) {return x*x;};
A.Sort (ฟังก์ชั่น (a, b) {return ab;});
var tensquared = (ฟังก์ชั่น (x) {return x*x;});
เช่นเดียวกับฟังก์ชั่น () คอนสตรัคเตอร์ฟังก์ชั่นสร้างฟังก์ชั่นที่ไม่มีชื่อโดยตรงและจะไม่เก็บฟังก์ชั่นนี้ไว้ในแอตทริบิวต์โดยอัตโนมัติ อย่างไรก็ตามเมื่อเปรียบเทียบกับตัวสร้างฟังก์ชัน () จำนวนฟังก์ชั่นโดยตรงมีข้อได้เปรียบที่สำคัญ หัวเรื่องของฟังก์ชั่นที่สร้างขึ้นโดยฟังก์ชั่นการสร้างฟังก์ชั่นจะต้องอธิบายโดยสตริงและวิธีนี้ในการแสดงฟังก์ชั่นที่ยาวและซับซ้อนนั้นซุ่มซ่าม แต่ร่างกายหลักของฟังก์ชั่นถูกใช้โดยไวยากรณ์ JavaScript มาตรฐาน และจำนวนฟังก์ชั่นโดยตรงได้รับการแก้ไขหนึ่งครั้งและรหัส JavaScript ส่งผ่านไปยังฟังก์ชัน () การสร้างฟังก์ชันเป็นสตริงไปยังตัวสร้างฟังก์ชัน () จะแยกวิเคราะห์และรวบรวมได้ทุกครั้งที่สร้างตัวสร้าง
ใน JavaScript1.1 ฟังก์ชั่น Constructor () สามารถใช้เพื่อกำหนดฟังก์ชั่น คุณควรให้ความสนใจกับความแตกต่างที่สำคัญระหว่างสองวิธีนี้
ขั้นแรกฟังก์ชัน Constructor () อนุญาตให้สร้างแบบไดนามิกและการรวบรวมรหัส JavaScript ในระหว่างการรันไทม์ แต่ปริมาณฟังก์ชั่นโดยตรงเป็นส่วนคงที่ของโครงสร้างฟังก์ชันเช่นเดียวกับคำสั่งฟังก์ชั่น
ประการที่สองเป็นผลลัพธ์ที่หลีกเลี่ยงไม่ได้ของความแตกต่างครั้งแรกทุกครั้งที่ฟังก์ชั่นคอนสตรัคเตอร์ () ใช้เพื่อวิเคราะห์ร่างกายฟังก์ชั่นและสร้างวัตถุหมายเลขฮันตะวันออกใหม่ หากการเรียกของคอนสตรัคเตอร์ปรากฏในวงจรหรือปรากฏในฟังก์ชั่นที่มักเรียกว่าประสิทธิภาพของวิธีนี้ต่ำมาก ในทางกลับกันฟังก์ชั่นซ้อนที่สามารถปรากฏโดยตรงในรอบและฟังก์ชั่นไม่ได้ทำการคอมไพล์ในการโทรแต่ละครั้งและวัตถุฟังก์ชันใหม่จะไม่ถูกสร้างขึ้นเมื่อใดก็ตามที่พบฟังก์ชั่นจำนวนโดยตรง
จุดที่สามระหว่างจำนวนเงินระหว่างฟังก์ชั่น () ตัวสร้างและฟังก์ชั่นคือฟังก์ชั่นที่สร้างขึ้นโดยฟังก์ชั่นคอนสตรัคเตอร์ () ไม่ได้ใช้ขอบเขตวลี มีการอธิบายรหัส:
var y y = "global";
ฟังก์ชั่น constructionFunction () ()
-
var y y = "local";
ส่งคืนฟังก์ชั่นใหม่ ("return y");
-
// บรรทัดของรหัสนี้จะแสดง "global" เนื่องจากฟังก์ชั่นที่ส่งคืนโดยตัวสร้างฟังก์ชัน () ไม่ได้ใช้ขอบเขตท้องถิ่น
// หากคุณใช้จำนวนฟังก์ชันโดยตรงรหัสบรรทัดนี้อาจแสดง "local"
การแจ้งเตือน (โครงสร้าง ());