no-case-declarations
禁止在 case 子句中使用词法声明
此规则禁止在 case
/default
子句中使用词法声明 (let
、const
、function
和 class
)。原因是词法声明在整个 switch 代码块中可见,但它仅在赋值时初始化,这只有在定义它的 case 被执行到时才会发生。
要确保词法声明仅适用于当前的 case 子句,请将您的子句包装在代码块中。
规则详细信息
此规则旨在防止访问未初始化的词法绑定以及跨 case 子句访问提升的函数。
此规则的错误代码示例
在游乐场中打开
/*eslint no-case-declarations: "error"*/
switch (foo) {
case 1:
break;
case 2:
break;
case 3:
break;
default:
}
此规则的正确代码示例
在游乐场中打开
/*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 中引入。