9

「var」で宣言されたJavaScriptの変数の有効期間はどれくらいですか。確かに、それは予想通りではありません。

<script>
function(){
   var a;
   var fun=function(){
     // a is accessed and modified  
     }
}();


</script>

ここで、JavaScriptガベージはいつどのように変数を収集しますaか?は内部関数のクロージャの一部であるためa、内部関数funは外部コンテキストへの参照として渡される可能性があるため、理想的にはガベージコレクションを取得しないでください。したがって、外部コンテキストから fun引き続きアクセスできるはずです。a

私の理解が正しければ、ガベージコレクションはどのように行われ、プログラムの実行まですべての変数をメモリに保持することができない可能性があるため、どのようにして十分なメモリスペースを確保するのでしょうか。

4

2 に答える 2

4

ECMAScript仕様は、ガベージコレクターがどのように機能するかを指定していません。識別子が(直接ポインターまたはクロージャーを介して)到達可能である場合、GCされるべきではないと述べているだけです。

ECMAScriptでの識別子の解決、クロージャ、スコープチェーン、ガベージコレクションに関するこの記事を確認してください。

それが役に立てば幸い

于 2010-04-22T12:28:21.020 に答える
1

'fun'への外部参照がある限り、'a'はガベージコレクションされません。ブラウザは、OSからより多くのメモリを要求することにより、十分なメモリがあることを確認します。

于 2010-04-22T12:58:51.207 に答える