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() {});
相容性
- JSCS: requireAnonymousFunctions
- JSCS: disallowAnonymousFunctions
版本
此規則是在 ESLint v0.4.0 中引入的。
延伸閱讀
