บทความก่อนหน้านี้กล่าวถึงวิธีการต่าง ๆ ในการเรียกฟังก์ชั่นที่ไม่ระบุชื่อ บทความนี้จะดูวิธีการต่าง ๆ ในการโทรหาฟังก์ชั่นชื่อ
1. ()
ฟังก์ชั่นที่ใช้กันมากที่สุดคือการเรียก/เรียกใช้ฟังก์ชัน:
การคัดลอกรหัสมีดังนี้:
// ไม่มีฟังก์ชั่นพารามิเตอร์ fun1
ฟังก์ชั่น fun1 () {
การแจ้งเตือน ('ฉันเรียกว่า');
-
fun1 ();
// ฟังก์ชั่นพารามิเตอร์ fun2
ฟังก์ชั่น fun2 (param) {
การแจ้งเตือน (param);
-
fun2 ('ฉันเรียกว่า');
หลังจาก ECMASCript3 แล้วให้ใช้ฟังก์ชันการโทรและใช้ฟังก์ชั่นมีฟังก์ชั่นสองประเภท
2. โทร
การคัดลอกรหัสมีดังนี้:
// ไม่มีฟังก์ชั่นพารามิเตอร์ fun1
ฟังก์ชั่น fun1 () {
การแจ้งเตือน ('ฉันเรียกว่า');
-
fun1.Call (NULL);
// ฟังก์ชั่นพารามิเตอร์ fun2
ฟังก์ชั่น fun2 (param) {
การแจ้งเตือน (param);
-
fun2.call (null, 'ฉันเรียกว่า')
3. สมัคร
การคัดลอกรหัสมีดังนี้:
// ไม่มีฟังก์ชั่นพารามิเตอร์ fun1
ฟังก์ชั่น fun1 () {
การแจ้งเตือน ('ฉันเรียกว่า');
-
fun1.apply (null);
// ฟังก์ชั่นพารามิเตอร์ fun2
ฟังก์ชั่น fun2 (param) {
การแจ้งเตือน (param);
-
fun2.apply (null, ['ฉันเรียกว่า'])
แม้ว่าการโทรสามารถใช้งานได้อย่างหมดจดเพื่อเรียกใช้ฟังก์ชั่นการโทร/ดำเนินการ
4. ใหม่ (ไม่แนะนำวิธีนี้)
การคัดลอกรหัสมีดังนี้:
// ไม่มีฟังก์ชั่นพารามิเตอร์ fun1
ฟังก์ชั่น fun1 () {
การแจ้งเตือน ('ฉันเรียกว่า');
-
Fun1 () ใหม่ ();
// ฟังก์ชั่นพารามิเตอร์ fun2
ฟังก์ชั่น fun2 (param) {
การแจ้งเตือน (param);
-
ใหม่ fun2 ('ฉันเรียกว่า')
สาระสำคัญของใหม่คือการสร้าง/สร้างอินสแตนซ์ของคลาส Fun1 และ Fun2 ที่กำหนดไว้ที่นี่ไม่ได้เป็นคลาส (ไม่มีสิ่งนี้ไม่มีต้นแบบ) แต่ฟังก์ชั่นทั้งสองดำเนินการ นี่คือผลข้างเคียงของใหม่
จากวิธีการโทรข้างต้นไม่มีความแตกต่างในผลลัพธ์การดำเนินการของสี่วิธี แต่ถ้าฟังก์ชั่นมีค่าส่งคืนมันอาจทำให้คุณผิดหวังเมื่อเรียกมันในรูปแบบใหม่
การคัดลอกรหัสมีดังนี้:
// ฟังก์ชั่นสนุกด้วยค่าส่งคืน
ฟังก์ชั่นสนุก () {
การแจ้งเตือน ('ฉันเรียกว่า');
กลับ "แจ็ค";
-
var c = ใหม่สนุก ();
แจ้งเตือน (c); // [วัตถุวัตถุ] ทำไมไม่ "แจ็ค"?
เปลี่ยนเป็นสิ่งนี้
การคัดลอกรหัสมีดังนี้:
// ฟังก์ชั่นสนุกด้วยค่าส่งคืน
ฟังก์ชั่นสนุก () {
การแจ้งเตือน ('ฉันเรียกว่า');
return {name: 'Jack'};
-
var c = ใหม่สนุก ();
การแจ้งเตือน (C.Name); // แจ็คมันกลับมาตามปกติ
เพื่อสรุป: เมื่อเรียกฟังก์ชั่นในรูปแบบใหม่ หากมีค่าส่งคืนค่าจะไม่ถูกส่งคืนเมื่อค่าส่งคืนเป็นประเภทในตัว (ประเภทฐาน) ของ JavaScript เช่นสตริง (สตริง), หมายเลข (หมายเลข), บูลีน, ฯลฯ ; เมื่อค่าส่งคืนเป็นประเภทวัตถุวัตถุฟังก์ชันและอาร์เรย์จะถูกส่งคืนโดยตรง
เมื่อค่าส่งคืนเป็นประเภทในตัว (ประเภทฐาน) สิ่งใหม่ ๆ จะส่งคืน () กลับมาอย่างไร บทความถัดไปจะหารือเกี่ยวกับรายละเอียดของการโทรวิธีใหม่