Skip to content
← Back to rules

eslint/func-names 风格

🛠️💡 An auto-fix and a suggestion are available for this rule for some violations.

它做了什么

要求或禁止函数表达式使用名称。

为什么这是个问题?

省略函数名称会导致错误堆栈中出现 <anonymous>,这使得定位错误发生的位置更加困难。显式命名函数不仅有助于提高可读性,还能增强代码的一致性。

示例配置:

json
{
  "func-names": ["error", "as-needed", { "generators": "never" }]
}

示例

此规则的 错误 代码示例:

js
/* func-names: ["error", "always"] */

Foo.prototype.bar = function () {};
const cat = { meow: function () {} };
(function () {
  /* ... */
})();
export default function () {}

此规则的 正确 代码示例:

js
/* func-names: ["error", "always"] */

Foo.prototype.bar = function bar() {};
const cat = { meow() {} };
(function bar() {
  /* ... */
})();
export default function foo() {}

as-needed

使用 "as-needed" 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "as-needed"] */

Foo.prototype.bar = function () {};
(function () {
  /* ... */
})();
export default function () {}

使用 "as-needed" 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "as-needed"] */

const bar = function () {};
const cat = { meow: function () {} };
class C {
  #bar = function () {};
  baz = function () {};
}
quux ??= function () {};
(function bar() {
  /* ... */
})();
export default function foo() {}

never

使用 "never" 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "never"] */

Foo.prototype.bar = function bar() {};
(function bar() {
  /* ... */
})();

使用 "never" 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "never"] */

Foo.prototype.bar = function () {};
(function () {
  /* ... */
})();

generators

使用 "always", { "generators": "as-needed" } 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "always", { "generators": "as-needed" }] */

(function* () {
  /* ... */
})();

使用 "always", { "generators": "as-needed" } 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "always", { "generators": "as-needed" }] */

const foo = function* () {};

使用 "always", { "generators": "never" } 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "always", { "generators": "never" }] */

const foo = bar(function* baz() {});

使用 "always", { "generators": "never" } 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "always", { "generators": "never" }] */

const foo = bar(function* () {});

使用 "as-needed", { "generators": "never" } 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "as-needed", { "generators": "never" }] */

const foo = bar(function* baz() {});

使用 "as-needed", { "generators": "never" } 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "as-needed", { "generators": "never" }] */

const foo = bar(function* () {});

使用 "never", { "generators": "always" } 选项时,此规则的 错误 代码示例:

js
/* func-names: ["error", "never", { "generators": "always" }] */

const foo = bar(function* () {});

使用 "never", { "generators": "always" } 选项时,此规则的 正确 代码示例:

js
/* func-names: ["error", "never", { "generators": "always" }] */

const foo = bar(function* baz() {});

配置

第一个选项

type: "always" | "as-needed" | "never"

"always"

要求所有函数表达式都必须有名称。

"as-needed"

仅在名称无法自动推断时才要求提供名称。

"never"

禁止函数表达式使用名称。

第二个选项

此选项是一个包含以下属性的对象:

generators

生成器函数表达式的配置。若未指定,则使用主配置。

接受值为 alwaysas-needednever

生成器函数是指使用 function* 语法定义的函数。

js
function* foobar(i) {
  yield i;
  yield i + 10;
}

如何使用

要通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "func-names": "error"
  }
}
bash
oxlint --deny func-names

参考资料