検索

ホームページ  >  に質問  >  本文

JavaScript forEach は配列項目ごとに新しい実行コンテキストを作成しますか、それとも現在の実行コンテキストの字句環境を更新するだけですか?

以下のコードでは、配列内の項目ごとに新しい実行コンテキストが作成されますか、それとも実行コンテキストは同じままで、字句環境の環境レコードだけが更新されますか?

コードではエラーがスローされないため、新しいスコープ (レキシカル環境) は実行コンテキストとは独立して作成されると思いますが、それが正しいかどうかはわかりません。

ああああ

P粉663883862P粉663883862231日前410

全員に返信(1)返信します

  • P粉674876385

    P粉6748763852024-04-02 23:22:53

    標準ライブラリ関数に提供されるコールバックについては特別なことは何もありません。これらは依然として関数であり、関数を呼び出す通常の方法で呼び出されます。

    ###はい。関数を呼び出すたびに (この場合、

    forEach がそのコールバックを呼び出すとき)、新しい実行コンテキストが作成されます。

    (この場合) は、新しい実行コンテキストの作成とは別のものではありません。関数を呼び出すための標準手順の一部として。

    対照的に、

    for-of ループを考えてみましょう: リーリー

    ここで呼び出すコールバック関数はありません。ループ本体は単なるブロックです。ただし、ブロック スコープ セマンティクスの定義方法により、ループ反復ごとに新しい字句環境オブジェクトが作成されます。これは、

    forEach コールバックと同様に、関数呼び出しが必要ない場合でも、ループ反復ごとに新しい foo が存在することを意味します。 (これは、ブロック内にイベント ハンドラーまたは同様のイベント ハンドラーを作成する場合に非常に便利です。) (代わりに var を使用すると、毎回新しいハンドラー var# が作成されるわけではありません。 var はブロック スコープではないため、## はブロックから周囲の関数スコープまたはグローバル スコープにジャンプします。これは、新しいコードでは var を決して使用しないことをお勧めします。理由の 1 つは、 .)

    返事
    0
  • キャンセル返事