私はクロージャについて学んでいます。ガベージコレクタの動作について少し知りたいと思います。次のコードでは:javascriptガベージコレクタのクロージャへの参照として、関数のカウントから返されるオブジェクトはありますか?
function valueMaker(name, value) {
var final = {};
final[name] = value;
final[double] = value*2;
return final;
}
first = valueMaker('first', 1);
私はそれが私がfinal
オブジェクトを持っているクロージャを作成valueMaker
呼び出すと、そして、それはオブジェクトを返します。
私の質問は:返されたオブジェクトは、クロージャへの参照としてカウントされますか? JavaScriptは私がクロージャを生きたままにしたいときに知っているほどスマートですか?
私はここに閉鎖を見ません。 – NineBerry
@NineBerry:関数を実行すると、関数の実行にクロージャが関連付けられます。http://www.ecma-international.org/ecma-262/6.0/#sec-function-definitions-runtime-semantics-評価 – lcjury
いいえ、クロージャは関数の作成ではなく、関数の実行にバインドされています。関数が作成されると、内部関数が作成される外部関数のローカル変数にバインドできます。これはクロージャと呼ばれます。 valueMakerは外部変数にアクセスしないため、valueMaker内に他の関数が作成されていないため、ここではこれは表示されません。 – NineBerry