版本

no-redeclare

禁止重複宣告變數

建議

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

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

規則詳情

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

此規則的錯誤程式碼範例

在遊樂場開啟
/*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;
    }
}

此規則的正確程式碼範例

在遊樂場開啟
/*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 } 選項的錯誤程式碼範例

在遊樂場開啟
/*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 中引入。

資源

變更語言