eslint/block-scoped-var Suspicious
何をするか
変数が宣言されると同時に使用されるべきであることを、同じブロックスコープ内で保証します。 このルールは、意図しない範囲外の変数の使用を防止し、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