訊息
SyntaxError: Function statements require a function name (V8-based) SyntaxError: function statement requires a name (Firefox) SyntaxError: Function statements must have a name. (Safari)
錯誤型別
SyntaxError
哪裡出錯了?
程式碼中存在需要名稱的函式宣告。你需要檢查函式是如何定義的,以及是否需要為其提供名稱,或者所討論的函式是否需要是函式表示式、IIFE,或者函式程式碼是否在此上下文中正確放置。
示例
語句 vs. 表示式
一個函式宣告(或函式定義)需要一個名稱。這不會起作用:
js
function () {
return "Hello world";
}
// SyntaxError: function statement requires a name
你可以使用函式表示式(賦值)來代替:
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");
},
);