2016-09-16 4 views
1

Ich lerne JS und lese, dass Funktionen als Parameter einfach jede andere Variable weitergegeben werden können. Im folgenden Code, wenn ich anonyme Funktion als Parameter übergeben gibt es "Uncaught SyntaxError: Unexpected token function"JS-Rückruffehler: Uncaught SyntaxError: Unerwartete Tokenfunktion

var x; 
function myfun(x, function(x) { 
    console.log("Value of x is: "+ x); 
}); 

myfun(2,4); 

ich mehr daran interessiert bin in die Logik hinter dem Fehler zu kennen. Was mache ich falsch?

Dank bt

+0

Funktionsparameter sollten die gleiche Syntax wie Variablennamen folgen. Wo ist der Körper der Funktion? –

+1

Sie haben es rückwärts. Die anonyme Funktion muss als 2. Argument in Ihren myfun() -Aufruf gehen.Die Definition muss lauten: 'function myfun (x, f) {f (x); } ' –

Antwort

0

In Ihrem Code scheinen Sie zu versuchen, zwei Funktionen zu deklarieren, eine mit dem Namen myfun, die zwei Argumente benötigt, und eine unbenannte (anonyme) Funktion, die ein Argument benötigt. Es scheint zwei Syntaxfehler in Ihrem Code zu geben: (1) Die Funktion myfun hat keinen Funktionskörper und (2) dass Sie eine Funktion in der Argumentliste von myfun deklarieren.

Lassen Sie uns diesen Ansatz, indem beide Funktionen zunächst erklärt (die zweite einen Namen geben und myfun eine Funktion Körper zu geben):

function myfun(x, functionToBeCalled) { 
    functionToBeCalled(x); 
} 

function functionToBePassed(x) { 
    console.log("Value of x is: "+ x); 
} 

Jetzt können wir die Funktion myfun nennen und es zwei Argumente übergeben, ein

myfun(2, functionToBePassed); 

Wenn Sie die zweite Funktion sein sollen: Wert für x und eine Funktion innerhalb myfun — der Funktion functionToBePassed aufgerufen werden anonym übergeben, erklären diese Funktion, wenn Sie Aufruf die Funktion myfun, nicht, wenn Siemyfun erklären :

//declare myfun 
 
function myfun(x, functionToBeCalled) { 
 
    functionToBeCalled(x); 
 
} 
 

 
//call myfun and pass a function as an argument 
 
myfun(2, function(x) { 
 
    console.log("Value of x is: "+ x); 
 
});

+0

[quote] Wenn Sie möchten, dass die zweite Funktion anonym übergeben wird, deklarieren Sie diese Funktion, wenn Sie die Funktion myfun aufrufen, nicht wenn Sie myfun deklarieren: [/ quote] Das war genau das, was ich tun wollte, aber verwirrt nur beim Lesen und lesen. Gerade diese Aussage, setzen viele Konzepte in Betracht. Tolle Antwort –

0

Wenn Sie möchten, dass Sie zumindest dessen Parameter eine anonyme Funktion als Parameter übergeben Namen angeben müssen. Also, wenn dieser Parameter undefined ist, wird es mit dieser Funktion zugewiesen, aber wir können nicht bestätigen, dass wir eine Funktion erhalten, also ist es besser, stattdessen eine Bedingung zu stellen.

Beispiel - Einstellung des Standardwert von fnc Parameter. Dies ist eine neue Browserimplementierung.

function myfun(x, fnc = function(x) { 
    console.log("Value of x is: " + x) 
}) 

{ 
    /* block statement is always required in a function declaration */ 
    fnc(x) 
} 

Beispiel - Prüfen, ob b ist eine Funktion

function myfun(x, fnc) 

{ 
    typeof fnc !== 'function' && (fnc = function(x) { 
     console.log("Value of x is: " + x) 
    }) 
    fnc(x) 
} 

Aber was Sie wollten tun:

function myfun(x) { 
    console.log("Value of x is: " + x) 
} 

Sie müssen nur direkt den Block-Anweisung deklarieren mit {...} .

Verwandte Themen