SyntaxError: function statement requires a name

Fehlermeldung

SyntaxError: function statement requires a name [Firefox]
SyntaxError: Unexpected token ( [Chrome]

Fehlertyp

Was ist falsch gelaufen?

Es gibt eine Funktionsstatement im Code, welches einen Namen ben├Âtigt. Man muss ├╝berpr├╝fen, wie Funktionen definiert sind und ob diese einen Namen ben├Âtigen oder ob diese Funktion ein Funktionsausdruck ist (eine IIFE) oder ob die Funktion im richtigen Kontext geschrieben ist.

Beispiele

Statements vs Ausdr├╝cke

Ein Funktionsstatement (oder Funktionsdeklaration) ben├Âtigt einen Namen. Folgendes funktioniert nicht:

function () {
  return 'Hello world';
}
// SyntaxError: function statement requires a name

Man kann stattdessen ein Funktionsausdruck (Zuweisung) nutzen:

var greet = function() {
  return 'Hello world';
};

Manchmal soll auch eine auch eine IIFE (Immediately Invoked Function Expression) sein, welche eine Funktion ist, die nach der Definition direkt ausgef├╝hrt wird. Daf├╝r m├╝ssen ein paar mehr Klammern benutzt werden:

(function () {

})();

Funktionen mit Labeln

Wenn man ein Funktionslabel benutzt, muss ein Funktionsnamen nach dem function Schl├╝sselwort stehen. Folgendes funktioniert nicht:

function Greeter() {
  german: function () {
    return "Moin";
  }
}
// SyntaxError: function statement requires a name

Das folgende funktioniert:

function Greeter() {
  german: function g() {
    return "Moin";
  }
}

Objektmethoden

Wenn man eine Methode f├╝r ein Objekt erstellen m├Âchte, muss ein Objekt erstellt werden. Die folgende Syntax ohne einen Namen nach dem function Schl├╝sselwort ist zul├Ąssig.

var greeter = {
  german: function () {
    return "Moin";
  }
};

Callback Syntax

Zudem sollte die Syntax bei Callbackfunktionen gepr├╝ft werden. Komma- und Klammersetzung kann schnell schwierig werden.

promise.then(
  function() {
    console.log("success");
  });
  function() {
    console.log("error");
}
// SyntaxError: function statement requires a name

Richtig ist folgendes:

promise.then(
  function() {
    console.log("success");
  },
  function() {
    console.log("error");
  }
);

Siehe auch