no-case-declarations
禁止在 case 子句中使用词法声明
此规则禁止在 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 {}
}
}
何时不使用
如果您依赖于 fall through 行为,并且想要访问在 case 块中引入的绑定。
相关规则
版本
此规则在 ESLint v1.9.0 中引入。