1

Ich habe mit dem Code oben und spielt immer noch nicht wissen, warum es so zu verhalten ist:Funktion höherer Ordnung Aufruf seltsame Verhalten

function myforEach(arr, func){ 
    for(var i=0; i<arr.length; i++){ 
    func(); 
    } 
} 
var arr = [1,2,3]; 

function func2(){ 
return 3+3; 
} 

myforEach(arr, func2); // undefined 

ich eine myforEach Funktion, die zwei Argumente ein Array nimmt und ein Funktion übergeben als Argument function, die im Folgenden innerhalb der for-Schleife 3 mal aufgerufen wird. Dann deklariere ich eine andere Funktion func2, die den Wert von 3 + 3 zurückgibt. Dann starte ich die myforEach mit den beiden Argumenten und ich erwarte, in der Konsole 3 mal den Wert 6 zu drucken, aber was zurückgegeben wird, ist nicht definiert.

Wenn ich die func2 Anweisung ändern: wieder

function func2(){ 
console.log(3+3); 
} 

und laufen i Konsole 6 dreimal angemeldet bekommen. myforEach(arr, func2); // (3)6

Dann wechsle ich wieder die func2 Aussage:

function func2(){ 
console.log("hi"); 
} 

myforEach(arr, func2); // (3)hi 

Wenn myforEach(arr, alert); // (3)alert jedoch versuchen, wenn ich versuche, Alarm ohne Klammer innerhalb func2 zu setzen function func2(){alert;} // undefined aber als Klammer Hinzufügen function func2(){alert();} alarmiert dann dreimal

Also die Frage ist, warum ist die function func2(){return 3+3;} 6 nicht dreimal zurück? Da in der for-Schleife das func() in Klammern steht, bedeutet das, dass irgendeine Funktion hinzugefügt wurde, warum wird das func2 nicht korrekt aufgerufen?

Ich habe etwas über stackoverflow geforscht, aber alles, was ich bekommen konnte, war die Rückkehr aus irgendeinem Grund verloren geht aber keine weitere detaillierte Erklärung zu dem Grund und Ursache.

Ist spät hier und ich weiß nicht, ob ich etwas vermisse oder einfach zu müde. Jede Erklärung wäre hilfreich. Danke :)

Antwort

2

Also die Frage ist, warum ist die Funktion func2() {3 + 3 zurückgeben;} nicht dreimal 6 zurück?

Es ist   — Sie tun nichts mit diesem Rückgabewert. Sie vorbei func2 in myforEach und als func empfangen, aber dann:

function myforEach(arr, func){ 
    for(var i=0; i<arr.length; i++){ 
    func(); // <=== You're not using the return value for anything 
    } 
} 

einfach den Wert zurückgibt es nicht dazu führen, Ausgabe überall automatisch zu sein.

Beachten Sie, dass dies der Fall sein würde, mit den eingebauten forEach auch:

console.log("Nothing gets output after this message"); 
 
var arr = [1,2,3]; 
 
function func2(){ 
 
return 3+3; 
 
} 
 
arr.forEach(func2);

forEach ist absichtlich fad, es tut nichts mit dem Rückgabewert der Funktion du gibst es. Es erinnert sich nicht an irgendwohin (das wäre map), es auszugeben, es mit anderen zusammenzufassen (das wäre reduce, effektiv), usw. Ihr myforEach ist ähnlich langweilig.

+0

Ja, aber ich habe erwartet, dass der Wert auf der Konsole aufgrund der Rückkehr 3 + 3 in der Func2 ausgegeben wird, aber es scheint, dass ich falsch lag. Ich frage mich, ob das Hinzufügen der Rückkehr zu func() innerhalb der Schleife 6 dreimal dreimal ausgeben würde, da die Funktion func() dreimal aufgerufen wird, jedoch nur einmal 6 in der Konsole ausgibt. Gibt es einen Grund warum? @ T.J. Crowder Danke für die Erklärung. :) – Alonso

+0

@AlonsoAhmetaj: Nichts wird automatisch an die Konsole ausgegeben, außer dem Ergebnis des äußersten Ausdrucks, den du eingegeben hast ('undefined', in deinem Fall, weil du eine Funktion aufruft, die keinen expliziten Rückgabewert setzt). Wenn Sie es in 'return func(); ändern, wird' 'myforEach' bei der ersten Schleifeniteration beendet, so dass Sie nur einmal 6 sehen. –

+0

Also, was wäre der richtige Weg, um es dreimal auszugeben, wenn es Ihnen nichts ausmacht, das zu teilen? Ich habe console.log verwendet und ich habe gearbeitet, aber ich dachte, es wäre eine andere Möglichkeit, den Wert dreimal zurückzugeben. Könnte auch zu einer Variablen hinzugefügt werden. Vielen Dank! – Alonso

0

Die Funktion gibt wie erwartet 6 zurück. Sie benötigen ein Mittel, um den zurückgegebenen Wert zu enthalten. Wenn Sie den Aufruf func2() einer Variablen zuweisen, wird sein Wert 6

Verwandte Themen