版本

func-names

要求或禁止命名的 function 表达式

一种越来越流行的模式是为函数表达式命名,以帮助调试。例如

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

在上面的例子中添加第二个 bar 是可选的。如果您省略函数名,那么当函数抛出异常时,您可能会在堆栈跟踪中得到类似于 anonymous function 的信息。如果您为函数表达式提供可选名称,那么您将在堆栈跟踪中获得函数表达式的名称。

规则详情

此规则可以强制或禁止使用命名的函数表达式。

选项

此规则有一个字符串选项

  • "always"(默认)要求函数表达式具有名称
  • "as-needed" 要求函数表达式具有名称,如果该名称不是按照 ECMAScript 规范自动分配的。
  • "never" 禁止命名的函数表达式,除非在递归函数中,此时需要名称

此规则有一个对象选项

  • "generators": "always" | "as-needed" | "never"
    • "always" 要求命名生成器
    • "as-needed" 如果名称不是按照 ECMAScript 规范自动分配的,则要求命名生成器。
    • "never" 在可能的情况下禁止命名生成器。

当未提供 generators 的值时,生成器函数的行为将回退到基本选项。

请注意,"always""as-needed" 要求 export default 声明中的函数表达式和函数声明具有名称。

always

使用默认 "always" 选项时,错误 代码示例

在 Playground 中打开
/*eslint func-names: ["error", "always"]*/

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

const cat = {
  meow: function() {}
}

(function() {
    // ...
}())

export default function() {}

使用默认 "always" 选项时,正确 代码示例

在 Playground 中打开
/*eslint func-names: ["error", "always"]*/

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

const cat = {
  meow() {}
}

(function bar() {
    // ...
}())

export default function foo() {}

as-needed

ECMAScript 6 在所有函数上引入了 name 属性。 name 的值是通过评估函数周围的代码来确定的,以查看是否可以推断出名称。例如,分配给变量的函数将自动具有一个 name 属性,该属性等于变量的名称。然后,name 的值用于堆栈跟踪中,以便于调试。

使用 "as-needed" 选项时,错误 代码示例

在 Playground 中打开
/*eslint func-names: ["error", "as-needed"]*/

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

(function() {
    // ...
}())

export default function() {}

使用 "as-needed" 选项时,正确 代码示例

在 Playground 中打开
/*eslint 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" 选项时,错误 代码示例

在 Playground 中打开
/*eslint func-names: ["error", "never"]*/

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

(function bar() {
    // ...
}())

使用 "never" 选项时,正确 代码示例

在 Playground 中打开
/*eslint func-names: ["error", "never"]*/

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

(function() {
    // ...
}())

generators

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

在 Playground 中打开
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

const foo = function*() {};

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

在 Playground 中打开
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

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

在 Playground 中打开
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

兼容性

版本

此规则在 ESLint v0.4.0 中引入。

延伸阅读

资源

更改语言