no-redeclare
禁止重複宣告變數
✅ 建議
在設定檔中使用來自 @eslint/js
的 recommended
設定會啟用此規則
在 JavaScript 中,可以使用 var
重新宣告相同的變數名稱。這可能會導致對於變數實際宣告和初始化的位置感到困惑。
規則詳情
此規則旨在消除在相同範圍內有多個宣告的變數。
此規則的錯誤程式碼範例
在遊樂場開啟
/*eslint no-redeclare: "error"*/
var a = 3;
var = 10;
class C {
foo() {
var b = 3;
var = 10;
}
static {
var c = 3;
var = 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
,此規則也會檢查內建全域變數(例如 Object
、Array
、Number
等)的重新宣告。
builtinGlobals
"builtinGlobals"
選項將檢查全域範圍中內建全域變數的重新宣告。
{ "builtinGlobals": true }
選項的錯誤程式碼範例
在遊樂場開啟
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/
var = 0;
請注意,當使用 sourceType: "commonjs"
(或如果使用預設解析器,則為 ecmaFeatures.globalReturn
)時,程式的頂層範圍實際上不是全域範圍,而是「模組」範圍。當情況如此時,宣告一個以內建全域變數命名的變數不是重新宣告,而是對全域變數的遮蔽。在這種情況下,應該使用帶有 "builtinGlobals"
選項的 no-shadow
規則。
由 TypeScript 處理
當使用 TypeScript 時,可以安全地停用此規則,因為 TypeScript 的編譯器會強制執行此檢查。
請注意,雖然 TypeScript 會捕獲 let
重新宣告和 const
重新宣告,但它不會捕獲 var
重新宣告。因此,如果您在 TypeScript 程式碼庫中使用舊式的 var
關鍵字,此規則仍然會提供一些價值。
相關規則
版本
此規則在 ESLint v0.0.9 中引入。