以下のコードでは、配列内の項目ごとに新しい実行コンテキストが作成されますか、それとも実行コンテキストは同じままで、字句環境の環境レコードだけが更新されますか?
コードではエラーがスローされないため、新しいスコープ (レキシカル環境) は実行コンテキストとは独立して作成されると思いますが、それが正しいかどうかはわかりません。
ああああP粉6748763852024-04-02 23:22:53
標準ライブラリ関数に提供されるコールバックについては特別なことは何もありません。これらは依然として関数であり、関数を呼び出す通常の方法で呼び出されます。
###はい。関数を呼び出すたびに (この場合、forEach がそのコールバックを呼び出すとき)、新しい実行コンテキストが作成されます。
対照的に、
for-of ループを考えてみましょう:
リーリー
forEach コールバックと同様に、関数呼び出しが必要ない場合でも、ループ反復ごとに新しい
foo が存在することを意味します。 (これは、ブロック内にイベント ハンドラーまたは同様のイベント ハンドラーを作成する場合に非常に便利です。) (代わりに
var を使用すると、毎回新しいハンドラー
var# が作成されるわけではありません。 var
はブロック スコープではないため、## はブロックから周囲の関数スコープまたはグローバル スコープにジャンプします。これは、新しいコードでは var
を決して使用しないことをお勧めします。理由の 1 つは、 .)