版本

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 = function() {};

const cat = {
  meow: function() {}
}

(function() {
    // ...
}())

export default function() {}

以下是使用預設 "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 = function() {};

(function() {
    // ...
}())

export default function() {}

以下是使用 "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 = function bar() {};

(function 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" }]*/

(function*() {
    // ...
}())

以下是使用 "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(function *baz() {});

以下是使用 "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(function *baz() {});

以下是使用 "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(function *() {});

以下是使用 "never", { "generators": "always" } 選項的此規則的正確程式碼範例

在遊樂場中開啟
/*eslint func-names: ["error", "never", { "generators": "always" }]*/

var foo = bar(function *baz() {});

相容性

版本

此規則是在 ESLint v0.4.0 中引入的。

延伸閱讀

資源

變更語言