Skip to content
← Back to rules

eslint/no-loop-func 細心な注意

何をするか

ループ文内に関数宣言や関数式を記述することを禁止し、それらがループの外側スコープで宣言された変数にアクセスする場合に該当します。これらの変数はイテレーション間で変化する可能性があります。

なぜ悪いのか

ループ内で関数を定義すると、JavaScript のクロージャの動作によりエラーが発生しやすくなります。関数は変数を参照によってキャプチャするため、値ではなく参照先そのものを保持します。var を使用する場合、これは関数スコープであり、すべてのイテレーションで同じ変数バインディングを共有するため、予期しない振る舞いが発生します。

このルールに対して誤りなコードの例:

js
for (var i = 0; i < 10; i++) {
  funcs[i] = function () {
    return i;
  };
}

このルールに対して正しいコードの例:

js
for (let i = 0; i < 10; i++) {
  funcs[i] = function () {
    return i;
  };
}

使用方法

設定ファイルまたは CLI でこのルールを有効化するには、以下のように指定できます:

json
{
  "rules": {
    "no-loop-func": "error"
  }
}
bash
oxlint --deny no-loop-func

参照