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 中引入。
延伸阅读
