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 = () {};
const cat = {
() {}
}
(() {
// ...
}())
export default () {}
使用默认 "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 = () {};
(() {
// ...
}())
export default () {}
使用 "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 = () {};
(() {
// ...
}())
使用 "never"
选项时,此规则的正确代码示例
/*eslint func-names: ["error", "never"]*/
Foo.prototype.bar = function() {};
(function() {
// ...
}())
generators
使用 "always", { "generators": "as-needed" }
选项时,此规则的错误代码示例
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/
(() {
// ...
}())
使用 "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(() {});
使用 "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(() {});
使用 "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(() {});
使用 "never", { "generators": "always" }
选项时,此规则的正确代码示例
/*eslint func-names: ["error", "never", { "generators": "always" }]*/
var foo = bar(function *baz() {});
兼容性
版本
此规则在 ESLint v0.4.0 中引入。