消息
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");
},
);