版本

init-declarations

要求或禁止在變數宣告中初始化

❄️ 已凍結

此規則目前為凍結狀態,不接受功能請求。

在 JavaScript 中,變數可以在宣告期間賦值,也可以在之後的任何時間點使用賦值語句賦值。例如,在以下程式碼中,foo 在宣告期間初始化,而 bar 稍後才初始化。

let foo = 1;
let bar;

if (foo) {
    bar = 1;
} else {
    bar = 2;
}

規則詳情

此規則旨在強制或消除宣告期間的變數初始化。例如,在以下程式碼中,foo 在宣告期間初始化,而 bar 則否。

let foo = 1;
let bar;

bar = 2;

此規則旨在使變數初始化和宣告保持一致性。

選項

此規則接受兩個選項

  1. 一個字串,必須是 "always"(預設值),以強制在宣告時初始化,或是 "never" 以禁止在宣告期間初始化。此規則適用於 varletconst 變數,但是 "never" 對於 const 變數會被忽略,因為未賦值的 const 會產生語法錯誤。
  2. 一個物件,用於進一步控制此規則的行為。目前,唯一可用的參數是 ignoreForLoopInit,它指示當設定為 "never" 時,是否允許在 for 迴圈中進行宣告時初始化,因為這是一個非常典型的用例。

您可以如下設定規則

變數必須在宣告時初始化(預設)

{
    "init-declarations": ["error", "always"],
}

變數不得在宣告時初始化

{
    "init-declarations": ["error", "never"]
}

變數不得在宣告時初始化,但在 for 迴圈中除外,其中允許初始化

{
    "init-declarations": ["error", "never", { "ignoreForLoopInit": true }]
}

always

對於預設 "always" 選項的錯誤程式碼範例

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

function foo() {
    var bar;
    let baz;
}

對於預設 "always" 選項的正確程式碼範例

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

function foo() {
    var bar = 1;
    let baz = 2;
    const qux = 3;
}

never

對於 "never" 選項的錯誤程式碼範例

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

function foo() {
    var bar = 1;
    let baz = 2;

    for (let i = 0; i < 1; i++) {}
}

對於 "never" 選項的正確程式碼範例

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

function foo() {
    var bar;
    let baz;
    const buzz = 1;
}

"never" 選項會忽略 const 變數初始化。

ignoreForLoopInit

對於 "never", { "ignoreForLoopInit": true } 選項的正確程式碼範例

在 Playground 中開啟
/*eslint init-declarations: ["error", "never", { "ignoreForLoopInit": true }]*/
for (let i = 0; i < 1; i++) {}

何時不該使用

當您對於變數如何初始化無所謂時。

版本

此規則在 ESLint v1.0.0-rc-1 中引入。

資源

變更語言