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 中引入。
延伸閱讀
