版本

no-case-declarations

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

推荐

配置文件中使用 @eslint/jsrecommended 配置启用此规则

💡 有建议

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

此规则禁止在 case/default 子句中使用词法声明 (let, const, functionclass)。原因是词法声明在整个 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 {}
    }
}

何时不使用

如果您依赖于 fall through 行为,并且想要访问在 case 块中引入的绑定。

版本

此规则在 ESLint v1.9.0 中引入。

资源

更改语言