版本

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" 選項時,此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "always"]*/

Foo.prototype.bar = function() {};

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

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

export default function() {}

使用預設 "always" 選項時,此規則的 正確 程式碼範例

在 Playground 中開啟
/*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" 選項時,此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "as-needed"]*/

Foo.prototype.bar = function() {};

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

export default function() {}

使用 "as-needed" 選項時,此規則的 正確 程式碼範例

在 Playground 中開啟
/*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" 選項時,此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function bar() {};

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

使用 "never" 選項時,此規則的 正確 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "never"]*/

Foo.prototype.bar = function() {};

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

generators

使用 "always", { "generators": "as-needed" } 選項時,此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

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

使用 "always", { "generators": "as-needed" } 選項時,此規則的 正確 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "always", { "generators": "as-needed" }]*/

const foo = function*() {};

使用 "always", { "generators": "never" } 選項時,此規則的 錯誤 程式碼範例

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

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

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

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

const foo = bar(function *() {});

使用 "as-needed", { "generators": "never" } 選項時,此規則的 錯誤 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

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

使用 "as-needed", { "generators": "never" } 選項時,此規則的 正確 程式碼範例

在 Playground 中開啟
/*eslint func-names: ["error", "as-needed", { "generators": "never" }]*/

const foo = bar(function *() {});

使用 "never", { "generators": "always" } 選項時,此規則的 錯誤 程式碼範例

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

const foo = bar(function *() {});

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

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

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

相容性

版本

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

延伸閱讀

資源

變更語言