2013-05-31 2 views
6

テイクこのコードは:参照が返されない場合、スコープは終了しますか?例えば

var test = (function(){ 
    var name = 'rar'; 
    return function foo(){ 
    console.log('test'); 
    }; 
}()); 

foo内側の範囲内nameへの参照なしtestに戻ります。 nameはどうなりますか?それは破壊されていますか?または、それは存在し続け、返された関数にぶら下がっていますが、アクセスできません。式の一部ではなかったnameかのように最初のケースでは、以下を実行することのようになります?:

var test = function foo(){ 
    console.log('test'); 
}; 

ここでは別のケースです:

var test2 = (function(){ 
    var name = 'rar'; 
    var age = '20'; 
    return function foo(){ 
    console.log(age); 
    }; 
}()); 

agefooによって参照されますと閉鎖を形成することになります。しかし、nameはまだ何も参照されていません。この場合、nameはどうなりますか?それは破壊されていますか?または、それは存在し続け、返された関数にぶら下がっていますが、アクセスできません。

+2

http://stackoverflow.com/a/864549/2269749 – BlitZ

+0

@CORRUP回答は、実装がどのようになるかを示しているようです。つまり、最悪の場合、「名前」はそのままになります。そうですか? – Joseph

+0

はい。ブラウザーには異なるJS GCエンジンがあり、それぞれが異なる場合があります。メモリリークを防ぐため、オプションとして 'name = null'を考慮してください。 – BlitZ

答えて

4

クロムでは、nameをGCします。 FireFoxでは、nameがクロージャ全体に保持されます。 IE?知りません。

+0

Chrome GCが「名前」ではなくFirefoxで表示されない理由についての参照をリクエストできますか? – Joseph

+0

@JosephtheDreamer私は参照がありません。私の答えは、ブラウザを使って作業している間の観察にのみ基づいています。 –

関連する問題