2016-07-07 9 views
1

Ich verstehe nicht, warum der folgende Code nicht 1 und 2 protokolliert und dann false zurückgibt. Bricht die Rückgabe nicht aus dem forEach-Bereich und dem Bereich von firstLayer, um false zurückzugeben? Richtig, es bricht nicht einmal den forEach-Bereich.Wie brechen/kehren Sie vollständig aus einer Schleifenfunktion innerhalb einer anderen Funktion in Javascript zurück?

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 
    arr.forEach(function (num) { 
    console.log(num); 
    if (num === 2) {return false;} 
    }); 
    return true; 
} 

firstLayer(arrayExample); 

//logs 1,2,3 and returns tru 

e

+5

Mögliches Duplikat von [Wie Array.forEach wie Kurzschluß kurzschließen?] (Http://stackoverflow.com/questions/2641347/how-to-short-circuit-array-foreach-like-calling-break) – Abaddon666

Antwort

0

versuchen diese. Es würde wie eine Schleife durchlaufen. Es würde bei 2 brechen und wird auch weiterhin nicht zu 3.

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 
    $.each(arr, function (num) { 
    console.log(num); 
    if (num === 2) { 
     return false; 
    } 
    }); 
    return true; 
} 

firstLayer(arrayExample); 

Dies ist, wie sie es hier tat: How to break out of jQuery each Loop

+0

also der einzige Unterschied ist, dass Sie eine jquery-Funktion anstelle einer nativen FOREACH-Methode verwendet haben? – akantoword

+0

Ja. Ich glaube, dass es einen Unterschied darin gibt, wie sie laufen. – Vinz

1

Ich bin nicht sicher, ob Sie forEach aus einem bestimmten Grund verwenden aber Eine For-Schleife wäre mein Ziel, wenn Sie etwas aus der Schleife herausbrechen müssen. Ich bin mir nicht sicher, ob Sie eine forEach so entweichen kann, aber hier ist der Arbeitscode:

var arrayExample = [1,2,3]; 

function firstLayer (arr) { 

for(i=0; i < arr.length; i++){ 
    var num = arr[i]; 
    console.log(num); 

    if(num === 2){ 
     return; 
    } 
    } 
} 

firstLayer(arrayExample); 

this helps

+0

gibt es einen Grund, warum die Rückkehr für eine "for" Schleife funktioniert, aber nicht fürEach? oder ist das genau so? – akantoword

+2

@jlei Der Grund ist, dass 'für (...)' ein Sprachkonstrukt ist, keine Funktion. Dann verlässt der 'return' seine Elternfunktion, die' firstLayer() 'one ist. Im Gegensatz dazu ist 'foreach()' _is_ eine Funktion, so dass 'return' für sie austritt. – cFreed

1

Es ist absolut normal: Ihr return false; Teil des arr.foreach() Funktion Körper.

Also diese arr.foreach() Funktion gibt false zurück, wenn num = 2, sonst wahr. Aber:

  • diese return hat keinen Einfluss darauf, wie die Funktion arbeitet, da es keine Erklärung ist, nachdem es
  • der zurück boolean Wert nie im Rahmen der externen firstlayer() Funktion verwendet wird

Diese externe Funktion gibt im Gegenzug immer wahr zurück.

+0

wäre es richtig zu sagen, dass es nach jeder Iteration in der Schleife (nach jedem console.log) sowieso eine implizite Rückgabe gibt? also macht meine Rückkehr falsch keinen Unterschied? Wenn ja, wie würde ich dann aus dieser Schleife ausbrechen, wenn ich nach 2 aufhören möchte? – akantoword

+1

@jlei "meine Rückkehr falsch macht keinen Unterschied?" Absolut ja. Und entschuldige, ich antwortete nur auf das "Warum funktioniert es so?" in Ihrem Fragetext enthalten, und nicht zu dem "wie es funktioniert, wie ich brauche?" des Titels! Diese zweite Frage wird von ConnorJohn beantwortet. Und schauen Sie sich meinen Kommentar unter der Antwort für eine Antwort auf Ihren eigenen Kommentar an. – cFreed