no-case-declarations

禁止 case 子句中的词法声明

配置文件 中的 "extends": "eslint:recommended" 属性启用了该规则

该规则不允许在 case/default 子句中使用词法声明(letconstfunctionclass)。原因是词法声明在整个 switch 块中是可见的,但它仅在分配时才被初始化,只有在达到定义它的情况下才会发生。

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

规则详情

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

IgbHXOREhuUzqrkIHAUBELO1IBTM0/W5rjS4T6KeTRJddVuoa/qPZgBhw0wa2au1

/*eslint no-case-declarations: "error"*/
/*eslint-env es6*/

switch (foo) {
    case 1:
        let x = 1;
        break;
    case 2:
        const y = 2;
        break;
    case 3:
        function f() {}
        break;
    default:
        class C {}
}

FphvHt5MK/G5o4JKMpo8wFZScNX7kGyQzE3xqEeYlFcVQkbgr+qufrIGgDR/9BRp

/*eslint no-case-declarations: "error"*/
/*eslint-env es6*/

// 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 {}
    }
}

何时不使用

nZG9fF/t3TU55t8u02Od06pvaqzNjmU+HB3xMjgipJXOZAikCeMNw5DLNxvECzrkaEIeZsw21v8MLaseQOQELWdCuqvP5khYN5u6qw5J5Xs=