MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

SyntaxError: function statement requires a name

メッセージ

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

エラータイプ

SyntaxError

何がうまくいかなかったのか?

コードに名前が必要な function ステートメントがあります。関数がどのように定義されているか、関数の名前を指定する必要があるかどうか、または問題の関数が関数式、IIFE である必要があるかどうか、 コードがこのコンテクストに正しく置かれているかどうかを確認する必要があります。

ステートメント vs 式

function ステートメント (または function 宣言) では名前が必要であり、これは動作しません:

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

代わりに、function 式 (代入) を使用できます:

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

または、定義するとすぐに実行される IIFE (即時実行関数式) を定義しようとしているのかもしれません。その場合は、もう少々括弧が必要です:

(function () {

})();

ラベル付けされた関数

関数 label を使用している場合、function キーワードの後に関数名を指定する必要があります。これは動作しません:

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

たとえば、これは動作します:

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

オブジェクトのメソッド

オブジェクトのメソッドを作るならば、オブジェクトを作る必要があります。その場合、function キーワードの後に名前がない次の構文は有効です。

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

コールバック構文

コールバックを使用するときの構文もチェックします。大括弧とカンマが混同しやすいです。

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

正しくは:

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

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama
 最終更新者: YuichiNukiyama,