no-case-declarations
不允许在 case 子句中进行词法声明
在 配置文件 中使用来自 @eslint/js
的 recommended
配置可以启用此规则
此规则报告的一些问题可通过编辑器 建议 手动修复
该规则不允许在 case
/default
子句中使用词法声明(let
、const
、function
和 class
)。原因是词法声明在整个 switch
块中可见,但只有在赋值时才会初始化,而赋值只有在到达定义它的 case
时才会发生。
¥This rule disallows lexical declarations (let
, const
, function
and class
)
in case
/default
clauses. The reason is that the lexical declaration is visible
in the entire switch
block but it only gets initialized when it is assigned, which
will only happen if the case
where it is defined is reached.
为确保词法声明仅适用于当前 case
子句,请将子句封装在块中。
¥To ensure that the lexical declaration only applies to the current case
clause
wrap your clauses in blocks.
规则详情
¥Rule Details
此规则旨在防止访问未初始化的词法绑定以及跨 case
子句访问提升的函数。
¥This rule aims to prevent access to uninitialized lexical bindings as well as accessing hoisted functions across case
clauses.
此规则的错误代码示例:
¥Examples of incorrect code for this rule:
/*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 {}
}
此规则的正确代码示例:
¥Examples of correct code for this rule:
/*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 {}
}
}
何时不使用
¥When Not To Use It
如果你依赖于 fall through 行为并希望访问 case
块中引入的绑定。
¥If you depend on fall through behavior and want access to bindings introduced in the case
block.
相关规则
版本
此规则是在 ESLint v1.9.0 中引入。