Di JS, Anda sering menghadapi situasi di mana fungsi lain dipanggil dalam fungsi. Pada saat ini, akan ada metode panggilan seperti fn (), dan yang lain adalah metode panggilan seperti return fn (). Beberapa pemula sering bingung dengan dua metode ini. Di sini kami menggunakan pertanyaan wawancara yang elegan untuk menganalisis perbedaan antara kedua metode tersebut.
var i = 0; function fn () {i ++; if (i <10) {fn (); } else {return i; }} var result = fn (); console.log (hasil);Ini adalah pertanyaan wawancara dengan jebakan tersembunyi. Tampaknya sangat sederhana. Kebanyakan orang mungkin menjawab 10 tanpa berpikir. Bahkan, dapat dilihat bahwa apa yang dicetak tidak ditentukan. Pertanyaan perangkap ini secara intuitif mencerminkan masalah yang disebutkan di atas. Saat kami memodifikasi baris yang mengeksekusi FN ke:
var i = 0; function fn () {i ++; if (i <10) {return fn (); } else {return i; }} var result = fn (); console.log (hasil);Pada saat ini, Anda akan menemukan bahwa hasil yang dicetak adalah 10.
Mengapa ada perbedaan besar antara menambahkan atau tidak menambahkan pengembalian di sini?
Alasan utama di sini sangat sederhana. Fungsi JavaScript memiliki nilai pengembalian default. Jika fungsi tidak menulis pengembalian di akhir, tidak ditentukan akan dikembalikan secara default. Inilah sebabnya mengapa di konsol chrome, saat menulis kode, garis yang tidak terdefinisi sering muncul di bawah.
Mari kita lihat lebih dekat contoh ini. Ketika saya meningkat menjadi 9, ini adalah yang kedua kalinya ketika FN disebut rekursif untuk waktu kedua dari belakang. Jika tidak ada pengembalian, setelah FN dieksekusi kali ini, kembalikan tidak ditentukan secara default, dan rekursi berikutnya tidak akan berlanjut. Ketika pengembalian ditambahkan, rekursi terakhir akan berlanjut di sini, yaitu, ketika saya = 10, melompat ke tempat lain dan kembali untuk mendapatkan 10 yang benar.
Berbicara tentang ini, kita dapat memperluas contoh yang lebih klasik, metode pencarian biner yang terkenal:
var mid = math.floor ((arr.length - 1) / 2); pencarian fungsi (n, mid) {if (n> arr [mid]) {mid = math.floor ((mid + arr.length) / 2); Pencarian kembali (n, mid); } else if (n <arr [mid]) {mid = math.floor ((mid - 1) / 2); Pencarian kembali (n, mid); } else {return mid; }} var index = Search (n, mid); console.log (index);Metode pencarian biner juga membutuhkan beberapa panggilan rekursif. Banyak pemula sering membuat kesalahan saat menerapkan algoritma ini untuk pertama kalinya. Adalah lupa untuk menambahkan pengembalian sebelum fungsi rekursif, yang pada akhirnya mengarah pada hasil pengembalian tidak ditentukan. Alasannya di sini mirip dengan yang sebelumnya. Jika Anda tidak menambahkan pengembalian, itu akan menyebabkan Anda kembali tidak terdefinisi langsung setelah rekursi, dan Anda tidak akan melanjutkan dengan rekursi berikutnya.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.