版本

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" 选项时,此规则的错误代码示例

在代码游乐场中打开
/*eslint func-names: ["error", "always"]*/

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

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

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

export default function() {}

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

在代码游乐场中打开
/*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" 选项时,此规则的错误代码示例

在代码游乐场中打开
/*eslint func-names: ["error", "as-needed"]*/

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

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

export default function() {}

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

在代码游乐场中打开
/*eslint func-names: ["error", "as-needed"]*/

var bar = function() {};

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

class C {
    #bar = function() {};
    baz = function() {};
}

quux ??= function() {};

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

export default function foo() {}

never

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

在代码游乐场中打开
/*eslint func-names: ["error", "never"]*/

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

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "never"]*/

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

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

generators

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

在代码游乐场中打开
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

var foo = function*() {};

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

在代码游乐场中打开
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "always", { "generators": "never" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

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

在代码游乐场中打开
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

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

兼容性

版本

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

进一步阅读

资源

更改语言