13

JavaScript (標準によると) はクロージャーをどこに保存しますか: ヒープまたはスタック?
閉鎖のための 3 番目の明示的な場所はありますか?

4

1 に答える 1

10

最終的には、ランタイムの実装の詳細です。フェニックスのリンクを参照

実装に関しては、コンテキストが破棄された後にローカル変数を格納するために、スタックベースの実装はもはや適合しません (スタックベースの構造の定義に矛盾するため)。したがって、この場合、親コンテキストのクロージャーされたデータは、ガベージ コレクター (GC) と参照カウントを使用して、動的メモリ割り当て (「ヒープ」、つまりヒープベースの実装) に保存されます。このようなシステムは、スタックベースのシステムよりも速度が劣ります。ただし、実装は常にそれを最適化する可能性があります。解析段階で、自由変数が関数で使用されているかどうかを確認し、これに応じて、データをスタックまたは「ヒープ」に配置するかどうかを決定します。

于 2013-06-06T11:09:04.600 に答える