SyntaxError: 函数语句需要名称

当代码中存在需要名称的 函数语句 时,就会出现 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)

错误类型

哪里出错了?

代码中存在需要名称的 函数语句。您需要检查函数是如何定义的,以及是否需要为其提供名称,或者该函数是否需要是一个函数表达式、一个 IIFE,或者该函数代码是否完全放置在这个上下文中。

示例

语句与表达式

函数语句(或函数声明)需要一个名称。这将不起作用

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

另请参阅