Brauchen Sie eine Erklärung über Javascript-Funktion und Callback

7

Ich lerne Javascript, und ich habe ein Video-Tutorial auf youtube verfolgt

Dies ist der ursprüngliche Code

%Vor%

und das Ergebnis des obigen Codes ist

  

5   main.js (Zeile 4)

     

erledigt   main.js (Zeile 9)

und ich mache eine kleine Änderung an dem Code in diese

%Vor%

und das Ergebnis ist das

  

erledigt   main.js (Zeile 9)

     

5   main.js (Zeile 4)

meine Frage sind:

  1. Könnten Sie mir erklären, warum ich das Ergebnis so gesammelt habe?,

  2. und was ist der Unterschied, wenn wir eine Funktion mit der Klammer () und ohne die Klammer () aufrufen?

stacheldraht27 01.03.2015, 16:02
quelle

5 Antworten

8

Erläuterung des ersten Snippets

%Vor%

Erläuterung des zweiten Snippets

%Vor%

Wie Sie sehen, führt das erste Code-Snippet die Funktion callback erst in der Funktion add aus, während die zweite Komponente die callback vor der add ausführt, so dass alles, was zurückkommt, übergeben werden kann von logDone in add .

    
Sumner Evans 01.03.2015, 16:10
quelle
4

Vielleicht wird es Ihnen klarer, wenn ich die logDone -Deklaration zu diesem ändern:

%Vor%

Der Bezeichner logDone ist im Grunde nur eine Variable, die auf eine Funktion verweist. Um die Funktion auszuführen (auch: call oder: rufen Sie auf), fügen Sie Klammern hinzu: logDone() .

In Ihrem ersten Beispiel übergeben Sie lediglich die Funktion selbst als drittes Argument an add() , das dann in add() mit callback(); ausgeführt wird.

In Ihrem zweiten Beispiel führen Sie jedoch die Funktion mit logDone() sofort aus, was dazu führt, dass der Rückgabewert von logDone() 1 als übergeben wird drittes Argument für den Aufruf add() . Mit anderen Worten, zuerst wird logDone ausgeführt (was zu der ersten Protokollnachricht führt), dann add wird ausgeführt (was zu der zweiten Protokollnachricht führt).

Außerdem macht die Anweisung callback; , innerhalb add nichts. Und wenn Sie die Klammern wie im ersten Beispiel verlassen hätten, würde dies zu einem Fehler führen, weil undefined 2 keine Funktion ist.

1) was in diesem Fall undefined ist, weil logDone() nicht explizit etwas zurückgibt.

2) der Wert, der das Ergebnis des Aufrufs logDone() war.

    
Decent Dabbler 01.03.2015 17:02
quelle
3
  

und was ist der Unterschied, wenn wir eine Funktion mit der Klammer () und ohne die Klammer () aufrufen?

Wenn Sie () haben, dann rufen Sie es an. Wenn nicht, dann nicht.

  

Könnten Sie mir erklären, warum ich das Ergebnis so gesammelt habe?,

Im ersten Beispiel übergeben Sie eine Funktion an add und dann ruft die Funktion add sie auf.

Im zweiten Beispiel rufen Sie die Funktion auf und übergeben ihren Rückgabewert ( undefined ) an add , was sie dann in einer Anweisung erwähnt, aber nichts damit macht.

    
Quentin 01.03.2015 16:06
quelle
3

Wenn Sie func([args=optional]) aufrufen, wird func aufgerufen oder wird aufgerufen.

  

und was ist der Unterschied, wenn wir eine Funktion mit der Klammer () und aufrufen   ohne die Klammer ()?

Wir rufen die Funktion nur dann auf, wenn wir () ausführen (Argumente optional). Wenn eine Funktion ohne Klammern ist, verwenden Sie nur ihre Referenz .

Wenn Sie eine Referenz speichern, können Sie eine Funktion in einer Variablen ausführen. Sie können sie später aufrufen, was callback tut.

Da im zweiten Snippet nichts zurückgegeben wird, hat der Rückruf undefined . Versuchen Sie es aufzurufen, indem Sie callback() im zweiten Snippet ausführen, und Sie sollten einen Fehler sehen, der besagt,

  

undefined ist keine Funktion.

    
Amit Joki 01.03.2015 16:06
quelle
3

Im ersten Beispiel übergeben Sie eine Funktion als Parameter.
In Ihrem zweiten Beispiel übergeben Sie ein Funktionsergebnis nach dem Aufruf als Parameter.

    
Amir Popovich 01.03.2015 16:06
quelle

Tags und Links