私はこれらの 2 つのブログを読んでいます: David Shariff によって発行された実行コンテキストとスコープ チェーンでは、JavaScript の実行コンテキストとスコープ チェーンの概念について詳しく説明しています。
上記のブログを読んだ後ではっきりしないことの 1 つは、javascript が親関数の実行コンテキストがガベージ コレクションされるのをどのように防止するかということです。
次の非常に単純なコードを見てみましょう。
function outer(){
var v1 = 'variable in outer function';
function inner(){
alert(v1);
}
return inner;
}
var innerFunc = outer();
外部関数が呼び出されると、内部関数へのポインターを取得します。したがって、この段階では、内部関数が作成/定義されていますが、まだ呼び出されていません。
ブログによると、関数が呼び出されている場合にのみ、スコープ チェーンが確立されます。したがって、内部関数が呼び出される前に、外部関数の実行コンテキストを参照するポインターはないと思います。では、js エンジンは外部関数の実行コンテキストがガベージ コレクションされるのをどのように防ぐのでしょうか?