eslint/block-scoped-var Suspicious
作用
强制要求变量在同一块级作用域内既被声明又被使用。 此规则防止意外地在预期块之外使用变量,模仿 JavaScript 中 C 风格的块级作用域。
为什么不好?
JavaScript 的 var 声明会被提升到其包围函数的顶部,这可能导致在块中声明的变量(例如在 if 或 for 内部)在块外部也可访问。 这可能导致难以发现的 bug。 通过强制块级作用域,此规则有助于避免提升问题,并与其他语言处理块变量的方式更加一致。
示例
此规则错误代码示例:
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);
}
}如何使用
To enable this rule using the config file or in the CLI, you can use:
json
{
"rules": {
"block-scoped-var": "error"
}
}ts
import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"block-scoped-var": "error",
},
});bash
oxlint --deny block-scoped-var版本
此规则在 v0.16.9 中加入。
