ใน JS คุณมักจะพบกับสถานการณ์ที่มีการเรียกฟังก์ชั่นอื่น ๆ ในฟังก์ชั่น ในเวลานี้จะมีวิธีการโทรเช่น fn () และอีกวิธีหนึ่งเป็นวิธีการโทรเช่น return fn () ผู้เริ่มต้นบางคนมักจะสับสนกับวิธีการทั้งสองนี้ ที่นี่เราใช้คำถามสัมภาษณ์ที่หรูหราเพื่อวิเคราะห์ความแตกต่างระหว่างสองวิธี
var i = 0; ฟังก์ชั่น fn () {i ++; if (i <10) {fn (); } else {return i; }} var result = fn (); console.log (ผลลัพธ์);นี่เป็นคำถามสัมภาษณ์ที่มีข้อผิดพลาดที่ซ่อนอยู่ ดูเหมือนง่ายมาก คนส่วนใหญ่อาจตอบ 10 โดยไม่คิด ในความเป็นจริงจะเห็นได้ว่าสิ่งที่พิมพ์ไม่ได้กำหนด คำถามกับดักนี้สะท้อนให้เห็นถึงปัญหาที่กล่าวถึงข้างต้นอย่างสังหรณ์ใจ เมื่อเราแก้ไขบรรทัดที่ดำเนินการ fn เป็น:
var i = 0; ฟังก์ชั่น fn () {i ++; if (i <10) {return fn (); } else {return i; }} var result = fn (); console.log (ผลลัพธ์);ในเวลานี้คุณจะพบว่าผลลัพธ์ที่พิมพ์คือ 10
เหตุใดจึงมีความแตกต่างอย่างมากระหว่างการเพิ่มหรือไม่เพิ่มการกลับมาที่นี่?
เหตุผลหลักที่นี่ง่ายมาก ฟังก์ชั่น JavaScript มีค่าส่งคืนเริ่มต้น หากฟังก์ชั่นไม่ได้เขียนผลตอบแทนในตอนท้ายที่ไม่ได้กำหนดจะถูกส่งคืนโดยค่าเริ่มต้น นี่คือเหตุผลว่าทำไมในคอนโซลโครเมี่ยมเมื่อเขียนโค้ดบรรทัดที่ไม่ได้กำหนดมักจะปรากฏด้านล่าง
มาดูตัวอย่างนี้อย่างละเอียด เมื่อฉันเพิ่มเป็น 9 มันเป็นครั้งที่สองที่ FN ถูกเรียกว่าซ้ำสำหรับเวลาสุดท้าย หากไม่มีการส่งคืนหลังจาก FN ถูกดำเนินการในครั้งนี้ให้ส่งคืนที่ไม่ได้กำหนดโดยค่าเริ่มต้นและการเรียกซ้ำครั้งต่อไปจะไม่ดำเนินการต่อ เมื่อเพิ่มการส่งคืนการเรียกซ้ำครั้งสุดท้ายจะดำเนินต่อไปที่นี่นั่นคือเมื่อฉัน = 10 กระโดดเข้าไปในอื่นและกลับไปรับ 10 ที่ถูกต้อง
เมื่อพูดถึงสิ่งนี้เราสามารถขยายตัวอย่างคลาสสิกมากขึ้น วิธีการค้นหาไบนารี ที่มีชื่อเสียง:
var mid = math.floor ((arr.length - 1) / 2); การค้นหาฟังก์ชั่น (n, mid) {ถ้า (n> arr [mid]) {mid = math.floor ((mid + arr.length) / 2); กลับมาค้นหา (n, กลาง); } อื่นถ้า (n <arr [mid]) {mid = math.floor ((mid - 1) / 2); กลับมาค้นหา (n, กลาง); } else {return mid; }} var index = search (n, mid); console.log (ดัชนี);วิธีการค้นหาแบบไบนารียังต้องการการโทรแบบเรียกซ้ำหลายครั้ง มือใหม่หลายคนมักจะทำผิดพลาดเมื่อใช้อัลกอริทึมนี้เป็นครั้งแรก มันคือลืมที่จะเพิ่มผลตอบแทนก่อนที่ฟังก์ชั่นการเรียกซ้ำซึ่งในที่สุดก็นำไปสู่ผลการส่งคืนที่ไม่ได้กำหนด เหตุผลที่นี่คล้ายกับอันก่อนหน้า หากคุณไม่เพิ่มผลตอบแทนมันจะทำให้คุณกลับมาที่ไม่ได้กำหนดโดยตรงหลังจากการเรียกซ้ำและคุณจะไม่ดำเนินการต่อไปอีกครั้งต่อไป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น