no-case-declarations
不允許在 case 子句中使用詞法宣告
✅ 推薦
在設定檔中使用來自 `@eslint/js` 的 `recommended` 設定會啟用此規則
💡 有建議
此規則報告的某些問題可以透過編輯器建議手動修復
此規則不允許在 case/default 子句中使用詞法宣告(let、const、function 和 class)。原因是詞法宣告在整個 switch 區塊中都可見,但它只在被賦值時才初始化,而這只會在到達定義它的 case 時才會發生。
為了確保詞法宣告僅適用於目前的 case 子句,請將您的子句包裝在區塊中。
規則詳情
此規則旨在防止存取未初始化的詞法綁定,以及跨 case 子句存取提升的函式。
此規則的**錯誤**程式碼範例
在 Playground 開啟
/*eslint no-case-declarations: "error"*/
switch (foo) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
}
此規則的**正確**程式碼範例
在 Playground 開啟
/*eslint no-case-declarations: "error"*/
// Declarations outside switch-statements are valid
const a = 0;
switch (foo) {
// The following case clauses are wrapped into blocks using brackets
case 1: {
let x = 1;
break;
}
case 2: {
const y = 2;
break;
}
case 3: {
function f() {}
break;
}
case 4:
// Declarations using var without brackets are valid due to function-scope hoisting
var z = 4;
break;
default: {
class C {}
}
}
何時不該使用
如果您依賴貫穿行為,並希望存取在 case 區塊中引入的綁定。
相關規則
版本
此規則在 ESLint v1.9.0 中引入。