วิธีการเรียกใช้ฟังก์ชัน
ก่อนที่จะพูดถึงพี่ชายทั้งสามสมัครโทรและผูกในจาวาสคริปต์ฉันอยากจะพูดคุยเกี่ยวกับวิธีการเรียกใช้ฟังก์ชัน:
•เป็นฟังก์ชัน
•เป็นวิธีการ
•เป็นตัวสร้าง
•การโทรผ่านทางอ้อมผ่าน () และใช้ () วิธีการ
เราทุกคนรู้วิธีการโทรสามวิธีก่อนหน้านี้และไม่ได้อยู่ในขอบเขตของบทความนี้ดังนั้นเราจะไม่พูดถึงพวกเขา
พูดคุยเกี่ยวกับวิธีการโทรครั้งที่สี่
การโทรทางอ้อมผ่านการโทร () และสมัคร ()
ในความเป็นจริงเราสามารถพิจารณาฟังก์ชั่นทั้งสองนี้เป็นวิธีการของวัตถุบางอย่างและเรียกฟังก์ชั่นทางอ้อมโดยเรียกวิธีการ:
ฟังก์ชั่น f () {} f.call (o); f.apply (o);พารามิเตอร์แรกของการโทร () และใช้ () เป็นวัตถุหลักที่จะเรียกใช้ฟังก์ชัน มันเป็นบริบทการโทรและการอ้างอิงถึงมันได้จากสิ่งนี้ภายในร่างกายฟังก์ชั่น
พวกเขาเหมือนกันหรือมีความแตกต่างและวิธีการผูกด้วย? ไม่ต้องกังวลมาวิเคราะห์ความแตกต่างและการเชื่อมต่อระหว่างสามรายละเอียดด้านล่าง
เรียก()
เมธอดการโทร () ระบุตัวชี้เฉพาะนี้ (IDIOT ไม่รบกวนฉันเกี่ยวกับความถูกต้อง) และพารามิเตอร์ไปยังวิธีที่เรียกมัน ตัวอย่างเช่นมีฟังก์ชั่นเช่นนี้:
var fn = function (arg1, arg2) {console.log (this, arg1, arg2); -ฉันจะเรียกมันว่า:
fn.call (null, 'skylor', 'min'); //1fn.call(Defined, 'skylor', 'min'); // 2var fx = function () {} fn.call (fx, 'skylor', 'min'); // 3ค่าการส่งคืนของวิธีการโทรทั้งสามนี้คืออะไร? ไม่มีเรื่องไร้สาระโปรดดู:
1. null "skylor" "min" 2. ไม่ได้กำหนด "skylor" "min" 3. fx "skylor" "min"
นี่เป็นกรณีจริงเหรอ? คุณฉลาดไปที่คอนโซลเบราว์เซอร์แล้วลองดู ฉันจะไปคุณเป็นคนสิบแปดมงกุฎนั่นไม่ใช่แบบนี้:
Chrome1. หน้าต่าง "skylor" "min" 2. window "skylor" "min" 3. fx "skylor" "min"
โอเคคุณฉลาด แต่สิ่งนี้แสดงให้เห็นถึงวิธีการโทรได้ดีมาก (หน้าต่างมีความก้าวหน้ามาก Microsoft กำลังหัวเราะคิกคัก ... )
เราสังเกตเห็นว่าวิธีการโทรพารามิเตอร์แรกคือการระบุตัวชี้นี้และพารามิเตอร์แต่ละตัวหลังจากนั้นระบุพารามิเตอร์ที่ต้องการ โปรดทราบว่าฉันใช้ "แต่ละ" ซึ่งหมายความว่าคุณต้องการพารามิเตอร์หลายตัวและต้องการเรียกใช้ฟังก์ชันและเขียนแต่ละพารามิเตอร์ลงไปทีละตัว
นำมาใช้()
สมัคร () เป็นพี่ชายของการโทร () สถานที่อื่น ๆ มีลักษณะเหมือนกันพวกเขาเป็นผู้ชายทั้งหมด แต่พวกเขาแตกต่างกันในที่เดียว มาดูตัวอย่างก่อน:
fn.apply (null, ['skylor', 'min']); //1fn.apply(fx, ['skylor', 'min']); // 2
พี่ชายคุณเขียนผิดหรือไม่? มีวงเล็บมากขึ้น ไม่ไม่ไม่นี่คือสิ่งที่ทำให้ดูแตกต่างจากการโทร พารามิเตอร์ที่สองคืออาร์เรย์พารามิเตอร์ที่ต้องการ
ผูก()
Bind () ไม่ใช่พวกเขาสามพี่น้องฉันเข้าใจสิ่งนี้ blabla …ไม่ไม่มันเป็นพี่ชายที่สาบานที่กลายเป็นพี่น้องสาบานด้วยการสมัครและโทรไม่ใช่พี่ชายที่แท้จริง
แน่นอนว่าวิธีการผูกยังช่วยให้คุณระบุตัวชี้นี้ แต่แทนที่จะเรียกฟังก์ชั่นมันจะส่งคืนฟังก์ชัน (หรือสำเนา) ที่เรียกมันและระบุตัวชี้และพารามิเตอร์นี้เฉพาะกับฟังก์ชันนี้ การประชุมตัวอย่างแสดงทุกอย่าง:
var fnbound = fn.bind (null, 'skylor', 'min');
ในเวลานี้ Fnbound เป็นฟังก์ชั่นอีกฟังก์ชั่นที่มีการชี้ไปที่ Null และพารามิเตอร์คือ ['skylor', 'min'] เรียกว่า:
fnbound ();
ผลลัพธ์:
null, 'skylor', 'min'
ไม่ต้องกังวลกับหน้าต่างกับฉัน - - - -
ความแตกต่างระหว่างการผูกกับพี่น้องอีกสองคนคือมันไม่เรียกฟังก์ชั่น แต่ส่งคืนฟังก์ชั่นใหม่ ในทำนองเดียวกันมันยังระบุตัวชี้และพารามิเตอร์นี้ วิธีการระบุพารามิเตอร์นั้นเหมือนกับการโทรและมาทีละตัว
มามีตัวอย่างสุดท้าย:
var ShoppingCart = (ฟังก์ชั่น () {var _calculatePrice = function () {return this.price * this.amount;}; return {calculatePrice: _calculatePrice}}) (); var goods = {ชื่อ: 'hammer', ราคา: 199, จำนวน: 2};สิ้นสุดลง -
ข้างต้นเป็นเนื้อหาทั้งหมดของการสมัครโทรและผูกใน JavaScript แนะนำให้คุณทราบโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!