eslint/block-scoped-var Suspicious
What it does
Enforces that variables are both declared and used within the same block scope. This rule prevents accidental use of variables outside their intended block, mimicking C-style block scoping in JavaScript.
Why is this bad?
JavaScript’s var
declarations are hoisted to the top of their enclosing function, which can cause variables declared in a block (e.g., inside an if
or for
) to be accessible outside of it. This can lead to hard-to-find bugs. By enforcing block scoping, this rule helps avoid hoisting issues and aligns more closely with how other languages treat block variables.
Options
No options available for this rule.
Examples
Examples of incorrect code for this rule:
js
/* block-scoped-var: "error" */
function doIf() {
if (true) {
var build = true;
}
console.log(build);
}
function doLoop() {
for (var i = 0; i < 10; i++) {
// do something
}
console.log(i); // i is accessible here
}
function doSomething() {
if (true) {
var foo = 1;
}
if (false) {
foo = 2;
}
}
function doTry() {
try {
var foo = 1;
} catch (e) {
console.log(foo);
}
}
Examples of correct code for this rule:
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++) {
// do something
}
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);
}
}
How to use
To enable this rule in the CLI or using the config file, you can use:
bash
oxlint --deny block-scoped-var
json
{
"rules": {
"block-scoped-var": "error"
}
}