版本

no-case-declarations

禁止在 case 子句中使用词法声明

推荐

配置文件 中使用来自 @eslint/jsrecommended 配置将启用此规则。

💡 hasSuggestions

此规则报告的一些问题可以通过编辑器 建议 手动修复。

此规则禁止在 case/default 子句中使用词法声明 (letconstfunctionclass)。原因是词法声明在整个 switch 代码块中可见,但它仅在赋值时初始化,这只有在定义它的 case 被执行到时才会发生。

要确保词法声明仅适用于当前的 case 子句,请将您的子句包装在代码块中。

规则详细信息

此规则旨在防止访问未初始化的词法绑定以及跨 case 子句访问提升的函数。

此规则的错误代码示例

在游乐场中打开
/*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 {}
}

此规则的正确代码示例

在游乐场中打开
/*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 中引入。

资源

更改语言