In JS begegnen Sie häufig Situationen, in denen andere Funktionen in Funktionen aufgerufen werden. Zu diesem Zeitpunkt gibt es eine Anrufmethode wie FN () und eine andere ist eine Anrufmethode wie die Rückgabe fn (). Einige Anfänger werden oft mit diesen beiden Methoden verwirrt. Hier verwenden wir eine elegante Interviewfrage, um die Unterschiede zwischen den beiden Methoden zu analysieren.
var i = 0; Funktion fn () {i ++; if (i <10) {fn (); } else {return i; }} var result = fn (); console.log (result);Dies ist eine Interviewfrage mit versteckten Fallstricken. Es scheint sehr einfach. Die meisten Menschen können 10 ohne Nachdenken antworten. Tatsächlich ist zu sehen, dass das, was gedruckt wird, undefiniert ist. Diese Trap -Frage spiegelt intuitiv das oben genannte Problem wider. Wenn wir die Zeile ändern, die FN ausführt, um:
var i = 0; Funktion fn () {i ++; if (i <10) {return fn (); } else {return i; }} var result = fn (); console.log (result);Zu diesem Zeitpunkt werden Sie feststellen, dass das gedruckte Ergebnis 10 ist.
Warum gibt es einen so großen Unterschied zwischen dem Hinzufügen oder nicht zwischen dem Hinzufügen einer Rendite hier?
Der Hauptgrund hier ist sehr einfach. JavaScript -Funktionen haben Standardrückgabewerte. Wenn die Funktion am Ende keine Rückgabe schreibt, wird undefined standardmäßig zurückgegeben. Aus diesem Grund erscheint in der Chromkonsole beim Schreiben von Code häufig eine und definierte Zeile unten.
Schauen wir uns dieses Beispiel genauer an. Wenn ich auf 9 erhöht wird, wird das zweite Mal für die vorletzte Zeit rekursiv aufgerufen. Wenn es keine Rückkehr gibt, kehren Sie nach der Ausführung von FN diesmal standardmäßig undefiniert zurück, und die nächste Rekursion wird nicht fortgesetzt. Wenn die Rückkehr hinzugefügt wird, wird die letzte Rekursion hier fortgesetzt, dh wenn i = 10, springen und zurückkehren, um die richtigen 10 zu erhalten.
Apropos, wir können ein klassisches Beispiel erweitern, die berühmte binäre Suchmethode :
var Mid = math.floor ((arr.length - 1) / 2); Funktionsuche (n, Mid) {if (n> arr [MID]) {Mid = Math.floor ((Mid + arr.Length) / 2); Rücksuche (n, Mid); } else if (n <arr [Mid]) {Mid = Math.Floor ((Mid - 1) / 2); Rücksuche (n, Mid); } else {return Mid; }} var index = suche (n, Mid); console.log (index);Die binäre Suchmethode erfordert auch mehrere rekursive Anrufe. Viele Neulinge machen oft Fehler bei der Implementierung dieses Algorithmus zum ersten Mal. Es ist zu vergessen, die Rückkehr vor der rekursiven Funktion hinzuzufügen, was schließlich dazu führt, dass das Rückgabeergebnis undefiniert ist. Der Grund hier ist ähnlich wie bei der vorherigen. Wenn Sie keine Rückkehr hinzufügen, können Sie undefinierte und Definierte direkt nach der Rekursion zurückkehren, und Sie werden nicht mit der nächsten Rekursion fortfahren.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.