บทความนี้ส่วนใหญ่แนะนำฟังก์ชั่นทั่วไปฟังก์ชั่นที่ไม่ระบุชื่อและฟังก์ชั่นการปิด
1. บทนำเกี่ยวกับฟังก์ชั่นทั่วไป
1.1 ตัวอย่าง
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นแสดงชื่อ (ชื่อ) {
การแจ้งเตือน (ชื่อ);
-
1.2 การเขียนทับของฟังก์ชั่นที่มีชื่อเดียวกันใน JS
ใน JS ฟังก์ชั่นจะไม่โอเวอร์โหลด พวกเขากำหนดฟังก์ชั่นที่มีชื่อฟังก์ชั่นเดียวกันและลายเซ็นพารามิเตอร์ที่แตกต่างกัน ฟังก์ชั่นที่ตามมาจะแทนที่ฟังก์ชั่นก่อนหน้า เมื่อเรียกว่าเฉพาะฟังก์ชั่นต่อไปนี้เท่านั้นที่จะถูกเรียก
การคัดลอกรหัสมีดังนี้:
var n1 = 1;
ฟังก์ชันเพิ่ม (value1) {
ส่งคืน N1 + 1;
-
การแจ้งเตือน (เพิ่ม (N1)); // ฟังก์ชั่นต่อไปนี้เรียกว่าเอาต์พุตคือ: 3
ฟังก์ชันเพิ่ม (ค่า 1, value2) {
คืนค่า 1 + 2;
-
การแจ้งเตือน (เพิ่ม (N1)); // เอาต์พุต: 3
1.3 อาร์กิวเมนต์วัตถุ
อาร์กิวเมนต์มีความคล้ายคลึงกับ C# พารามิเตอร์พารามิเตอร์การดำเนินการพารามิเตอร์: จำนวนพารามิเตอร์ที่ส่งผ่านในฟังก์ชันมากกว่าจำนวนพารามิเตอร์ในเวลาที่นิยาม
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่นแสดงชื่อ (ชื่อ) {
การแจ้งเตือน (ชื่อ); // จางซาน
สำหรับ (var i = 0; i <arguments.length; i ++) {
การแจ้งเตือน (อาร์กิวเมนต์ [i]); // จางซาน, หลี่ศรี, วังวู
-
-
sholdames ('จางซาน', 'Li Si', 'Wang Wu');
1.4 ค่าช่วงเริ่มต้นของฟังก์ชัน
หากฟังก์ชั่นไม่ได้ระบุค่าที่ส่งคืนผลตอบแทนเริ่มต้นคือ 'ไม่ได้กำหนด'
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น showmsg () {
-
Alert (showmsg ()); // output: undefined
2. ฟังก์ชั่นนิรนาม
2.1 ฟังก์ชั่นที่ไม่ระบุชื่อตัวแปร
2.1.1 คำอธิบาย
ฟังก์ชั่นสามารถกำหนดให้กับตัวแปรและเหตุการณ์
2.1.2 ตัวอย่าง
การคัดลอกรหัสมีดังนี้:
// ฟังก์ชั่นที่ไม่ระบุชื่อตัวแปรด้านซ้ายอาจเป็นตัวแปรเหตุการณ์ ฯลฯ
var anonymousnormal = function (p1, p2) {
การแจ้งเตือน (P1+P2);
-
anonymousnormal (3,6); // output 9
2.1.3 สถานการณ์ที่ใช้งานได้
①หลีกเลี่ยงมลพิษชื่อฟังก์ชั่น หากคุณประกาศฟังก์ชั่นที่มีชื่อก่อนแล้วกำหนดให้กับตัวแปรหรือเหตุการณ์มันจะทำให้เกิดการใช้ชื่อฟังก์ชั่นในทางที่ผิด
2.2 ฟังก์ชั่นนิรนามโดยไม่มีชื่อ
2.2.1 คำอธิบาย
นั่นคือเมื่อมีการประกาศฟังก์ชั่นพารามิเตอร์จะถูกติดตาม เมื่อ JS Syntax แยกวิเคราะห์ฟังก์ชั่นนี้รหัสภายในจะถูกดำเนินการทันที
2.2.2 ตัวอย่าง
การคัดลอกรหัสมีดังนี้:
(ฟังก์ชั่น (p1) {
การแจ้งเตือน (P1);
}) (1);
2.2.3 สถานการณ์ที่ใช้งานได้
①ดำเนินการเพียงครั้งเดียว หากเบราว์เซอร์โหลดมันจะต้องดำเนินการเฉพาะฟังก์ชั่นที่ไม่ได้ดำเนินการในภายหลัง
3. ฟังก์ชั่นปิด
3.1 คำอธิบาย
สมมติว่าฟังก์ชั่น A ประกาศฟังก์ชัน B ภายในฟังก์ชั่น B หมายถึงตัวแปรอื่นนอกเหนือจากฟังก์ชั่น B และค่าการส่งคืนของฟังก์ชั่น A คือการอ้างอิงถึงฟังก์ชั่น B จากนั้นฟังก์ชั่น B คือฟังก์ชันปิด
3.2 ตัวอย่าง
3.2.1 ตัวอย่างที่ 1: การอ้างอิงทั่วโลกและการอ้างอิงในท้องถิ่น
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น funa () {
var i = 0;
ฟังก์ชั่น funb () {// ฟังก์ชั่นปิด funb
i ++;
การแจ้งเตือน (i)
-
คืน Funb;
-
var allshowa = funa (); // การอ้างอิงตัวแปรทั่วโลก: เอาต์พุตสะสม 1, 2, 3, 4, ฯลฯ
ฟังก์ชั่น partshowa () {
var showa = funa (); // การอ้างอิงตัวแปรท้องถิ่น: เอาต์พุตเท่านั้น 1
showa ();
-
Allshowa เป็นตัวแปรระดับโลกที่อ้างอิงฟังก์ชั่น funa ทำซ้ำ allshowa () และจะส่งออกค่าสะสมเช่น 1, 2, 3, 4
ดำเนินการฟังก์ชั่น partshowa () เพราะมีเพียงการประกาศตัวแปรท้องถิ่นเท่านั้นที่ประกาศภายในเพื่ออ้างอิง funa หลังจากดำเนินการทรัพยากรที่ถูกครอบครองโดย showa จะถูกปล่อยออกมาเนื่องจากความสัมพันธ์ของขอบเขต
กุญแจสำคัญในการปิดคือขอบเขต: ทรัพยากรที่ถูกครอบครองโดยตัวแปรทั่วโลกจะถูกปล่อยออกมาหลังจากการเปลี่ยนแปลงหน้าหรือเบราว์เซอร์ปิด เมื่อ var allshowa = funa () มันจะเทียบเท่ากับ Allshowa ที่อ้างถึง funb () ดังนั้นทรัพยากรใน funb () จะไม่ถูกรีไซเคิลโดย GC ดังนั้นทรัพยากรใน funa () จะไม่เป็น
3.2.2 ตัวอย่างที่ 2: ฟังก์ชั่นปิดพารามิเตอร์
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น funa (arg1, arg2) {
var i = 0;
ฟังก์ชั่น funb (ขั้นตอน) {
i = i + step;
การแจ้งเตือน (i)
-
คืน Funb;
-
var allshowa = funa (2, 3); // การโทรคือ funa arg1 = 2, arg2 = 3
Allshowa (1); // การโทรคือ funb step = 1, เอาต์พุต 1
Allshowa (3); // การโทรคือ funb setp = 3, output 4
3.2.3 ตัวอย่างที่ 3: การแบ่งปันตัวแปรในฟังก์ชั่นหลัก funa
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น funa () {
var i = 0;
ฟังก์ชั่น funb () {
i ++;
การแจ้งเตือน (i)
-
allshowc = function () {// allshowc หมายถึงฟังก์ชั่นที่ไม่ระบุชื่อและแบ่งปันตัวแปร I กับ funb
i ++;
การแจ้งเตือน (i)
-
คืน Funb;
-
var allshowa = funa ();
var allshowb = funa (); // allshowb อ้างอิง funa, allshowc rebinds ภายในและแบ่งปันตัวแปร i กับ allshowb
3.3 สถานการณ์ที่เกี่ยวข้อง
①ตรวจสอบความปลอดภัยของตัวแปรภายในฟังก์ชั่น funa เนื่องจากภายนอกไม่สามารถเข้าถึงตัวแปร Funa โดยตรง
คุณมีความคิดเกี่ยวกับฟังก์ชั่นฟังก์ชั่นของ JavaScript หรือไม่? หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉัน