Skip to content
← Back to rules

eslint/block-scoped-var Suspicious

何をするか

変数が宣言されると同時に使用されるべきであることを、同じブロックスコープ内で保証します。 このルールは、意図しない範囲外の変数の使用を防止し、JavaScript における C 言語風のブロックスコープを再現します。

なぜ問題なのか

JavaScript の var 宣言は、その関数のスコープのトップにホイストされますが、これは iffor 内部などブロック内に宣言された変数が、ブロック外からもアクセス可能になる可能性を生じます。 これにより、見つけにくいバグが発生する可能性があります。 ブロックスコープを強制することで、このルールはホイストに関する問題を回避し、他の言語でブロックスコープ変数を扱う方法とより一致するようにします。

このルールに対する誤りなコードの例:

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

参照