SyntaxError: function statement requires a name
JavaScript の例外 "function statement requires a name" は、名前が必要な関数文がコードの中にあった場合に発生します。
エラーメッセージ
SyntaxError: Function statements require a function name (V8-based) SyntaxError: function statement requires a name (Firefox) SyntaxError: Function statements must have a name. (Safari)
エラーの種類
エラーの原因
例
文と式
function 文 (または function 宣言)では名前が必要であり、次のものは動作しません。
js
function () {
return "Hello world";
}
// SyntaxError: function statement requires a name
代わりに、function 式 (代入)を使用することができます。
js
const greet = function () {
return "Hello world";
};
または、定義するとすぐに実行される IIFE (即時実行関数式)を定義しようとしているのかもしれません。その場合は、もう少々括弧が必要です。
js
(function () {
// …
})();
ラベル付けされた関数
ラベルは関数名とは全く異なる機能です。ラベルを関数名として使用することはできません。
js
function Greeter() {
german: function () {
return "Moin";
}
}
// SyntaxError: function statement requires a name
また、ラベル付け関数宣言そのものは非推奨です。代わりに通常の関数宣言を使用してください。
js
function Greeter() {
function german() {
return "Moin";
}
}
オブジェクトのメソッド
オブジェクトのメソッドを作るならば、オブジェクトを作る必要があります。その場合、function
キーワードの後に名前がない次の構文は有効です。
js
const greeter = {
german: function () {
return "Moin";
},
};
メソッド構文を使用することもできます。
js
const greeter = {
german() {
return "Moin";
},
};
コールバック構文
コールバックを使用するときの構文もチェックします。 大括弧とカンマが混同しやすいです。
js
promise.then(
function () {
console.log("success");
});
function () {
console.log("error");
}
// SyntaxError: function statement requires a name
正しくは、次の通りです。
js
promise.then(
function () {
console.log("success");
},
function () {
console.log("error");
},
);