eslint/block-scoped-var 可疑
它的作用
强制要求变量在声明和使用时均处于相同的块级作用域内。 此规则可防止意外地在预期块作用域之外使用变量,模拟 JavaScript 中类似 C 语言的块级作用域行为。
为什么这是不好的?
在 JavaScript 中,var 声明会被提升到其封闭函数的顶部,这可能导致在块(例如 if 或 for 内部)中声明的变量可以在该块外部被访问。 这可能会导致难以发现的错误。 通过强制执行块级作用域,此规则有助于避免提升问题,并使行为更接近其他语言对块变量的处理方式。
示例
此规则的 错误 代码示例:
js
/* block-scoped-var: "error" */
function doIf() {
if (true) {
var build = true;
}
console.log(build);
}
function doLoop() {
for (var i = 0; i < 10; i++) {
// 执行某些操作
}
console.log(i); // i 在此处仍然可访问
}
function doSomething() {
if (true) {
var foo = 1;
}
if (false) {
foo = 2;
}
}
function doTry() {
try {
var foo = 1;
} catch (e) {
console.log(foo);
}
}此规则的 正确 代码示例:
js
/* block-scoped-var: "error" */
function doIf() {
var build;
if (true) {
build = true;
}
console.log(build);
}
function doLoop() {
var i;
for (i = 0; i < 10; i++) {
// 执行某些操作
}
console.log(i);
}
function doSomething() {
var foo;
if (true) {
foo = 1;
}
if (false) {
foo = 2;
}
}
function doTry() {
var foo;
try {
foo = 1;
} catch (e) {
console.log(foo);
}
}如何使用
要通过配置文件或 CLI 启用 此规则,可以使用:
json
{
"rules": {
"block-scoped-var": "error"
}
}bash
oxlint --deny block-scoped-var