版本

no-redeclare

不允許變數重複宣告

推薦

設定檔中使用來自@eslint/jsrecommended設定啟用此規則

在 JavaScript 中,可以使用 var 重新宣告相同的變數名稱。這可能會導致對於變數實際宣告和初始化的位置感到困惑。

規則詳情

此規則旨在消除在相同範圍內有多個宣告的變數。

此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint no-redeclare: "error"*/

var a = 3;
var a = 10;

class C {
    foo() {
        var b = 3;
        var b = 10;
    }

    static {
        var c = 3;
        var c = 10;
    }
}

此規則的正確程式碼範例

在 Playground 中開啟
/*eslint no-redeclare: "error"*/

var a = 3;
a = 10;

class C {
    foo() {
        var b = 3;
        b = 10;
    }

    static {
        var c = 3;
        c = 10;
    }
}

選項

此規則接受一個可選參數,一個具有布林屬性 "builtinGlobals" 的物件。它預設為 true。如果設定為 true,此規則也會檢查內建全域變數(例如 ObjectArrayNumber…)的重新宣告。

builtinGlobals

"builtinGlobals" 選項將檢查在全域範圍中重新宣告內建全域變數的情況。

{ "builtinGlobals": true } 選項的錯誤程式碼範例

在 Playground 中開啟
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/

var Object = 0;

請注意,當使用 sourceType: "commonjs"(或 ecmaFeatures.globalReturn,如果使用預設解析器),程式的最頂層範圍實際上不是全域範圍,而是一個「模組」範圍。在這種情況下,宣告一個以內建全域變數命名的變數不是重新宣告,而是全域變數的遮蔽。在這種情況下,應使用具有 "builtinGlobals" 選項的 no-shadow 規則。

由 TypeScript 處理

當使用 TypeScript 時,可以安全地停用此規則,因為 TypeScript 的編譯器會強制執行此檢查。

請注意,雖然 TypeScript 會捕捉 let 重新宣告和 const 重新宣告,但它不會捕捉 var 重新宣告。因此,如果您在 TypeScript 程式碼庫中使用舊版的 var 關鍵字,此規則仍然會提供一些價值。

版本

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

資源

變更語言