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