# func-names

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

一种越来越普遍的模式是给函数表达式命名以帮助调试。例如:

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

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

# 规则详情

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

# 选项

此规则有一个字符串选项:

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

此规则有一个对象选项:

  • "generators": "always" | "as-needed" | "never"``"always" 需要命名生成器 如果没有按照 ECMAScript 规范自动分配名称,则 "as-needed" 需要命名生成器。 "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() {});

# 兼容性

  • JSCSrequireAnonymousFunctions
  • JSCSdisallowAnonymousFunctions
Last Updated: 5/13/2023, 8:55:38 PM