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