Skip to content
← Back to rules

eslint/no-inner-declarations 細部にこだわる

何を行うか

ネストされたブロック内での変数または関数の宣言を禁止します。

なぜ問題なのか

変数の宣言は、文が置ける場所であればどこでも許可されており、他のブロックの深い部分にまでネストされることがあります。 これは、変数のホイスト(昇格)によって望ましくない場合が多く、宣言をプログラムまたは関数本体のルートに移動させることで、コードの明確性が向上します。 ただし、ブロックスコープのバインディング(letconst)はホイストされないため、このルールの影響を受けません。

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

javascript
if (test) {
  function doSomethingElse() {}
}

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

javascript
function doSomethingElse() {}
if (test) {
  // ここにあなたのコードを記述してください
}

設定

1 番目のオプション

type: "functions" | "both"

チェックする宣言の種類を決定します。

"functions"

ネストされたブロック内の関数宣言を禁止します。

"both"

ネストされたブロック内の関数および var 宣言を禁止します。

2 番目のオプション

このオプションは以下のプロパティを持つオブジェクトです。

blockScopedFunctions

type: "allow" | "disallow"

"allow"

厳密モード(ES6+ の動作)では、ネストされたブロック内の関数宣言を許可します。

"disallow"

厳密モードの有無に関係なく、ネストされたブロック内の関数宣言を禁止します。

使用方法

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

json
{
  "rules": {
    "no-inner-declarations": "error"
  }
}
bash
oxlint --deny no-inner-declarations

参照