2010-04-22 29 views
8

"var" ile bildirilen, bir değişkenin JavaScript'deki ömrü nedir. Elbette, kesinlikle beklentiye göre değil. İşteJavaScript değişkenlerinin ömür boyu

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


</script> 

nasıl ve JavaScript çöp değişkeni a topluyor zaman? a, iç fonksiyonun kapanmasının bir parçası olduğundan, ideal olarak asla çöp toplanmamalı, çünkü iç işlev fun, harici bir içeriğe başvuru olarak iletilebilir. fun Yani dış bağlamdan hala a erişmek mümkün olmalıdır. Benim anlayış doğru ise

, nasıl çöp toplama sonra meydana geliyor ve nasıl savunulabilir olmayabilir programın yürütülmesi kadar bellekte tüm değişkenleri tutmak beri, yeterli bellek alanı olması sağlıyor?

+0

Bu harika bir soru btw. Kapağın kendisinin, kapanış GC'ed oluncaya kadar bellekte tutulan tek şey olmadığını belirtmektedir. Fonksiyonun tüm kapsam zinciri de öyle. Bazı tartışmalar var gibi görünmektedir, ancak bazı ek düşünceler, JavaScript'deki her işlev bildiriminin, global kapsama göre bir kapatma olduğunu gösterecektir. Ancak bir istisna vardır (bu cevaba bakınız) (http://stackoverflow.com/a/30252865/511795) – Shanimal

cevap

4

ECMAScript belirtimi çöp toplayıcısının nasıl çalışacağını belirtmez, yalnızca bir tanımlayıcı erişilebilir olduğunda (doğrudan bir işaretçi veya bir kapatma yoluyla), GCed olmamalıdır. ECMAScript'te tanımlayıcı çözünürlüğü, kapatmalar, kapsam zincirleme ve çöp toplama hakkında this makalesine bakın.

o

1

yardımcı Umut 'a' çöp toplanan sürece 'eğlenceli' dış referanslar olduğu gibi olmayacak. Tarayıcı, işletim sisteminden daha fazla bellek isteyerek yeterli belleğe sahip olmasını sağlar.

+0

"Tarayıcı, işletim sisteminden daha fazla bellek isteyerek yeterli belleğe sahip olmasını sağlar." - lol ... yeterince iyi :-) – osa

İlgili konular