版本

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:
        let x = 1;
        break;
    case 2:
        const y = 2;
        break;
    case 3:
        function f() {}
        break;
    default:
        class C {}
}

此規則的**正確**程式碼範例

在 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 中引入。

資源

變更語言