Pekala, sanırım ona açık bir atıfta bulunmazsınız, çünkü bu onu ayrılmış kalmaya zorlar.
Aklıma gelen en basit test aslında birçok söz vermek ve bunları çözmemek:
var $q = angular.injector(["ng"]).get("$q");
setInterval(function () {
for (var i = 0; i < 100; i++) {
var $d = $q.defer();
$d.promise;
}
}, 10);
Ve sonra yığının kendisini izliyor. Chrome profil oluşturma araçlarında görebileceğimiz gibi, bu, 100 söz ayırmak için gerekli belleği biriktirir ve ardından tüm JSFIddle sayfası için 15 megabaytın altında "orada kalır".
![görüntü açıklamasını buraya girin](https://i.stack.imgur.com/bXdVe.png)
Diğer taraftan, kaynak koduna bakarsak$q
Küresel bir noktadan belirli bir söze referans olmadığını, yalnızca bir sözden geri aramalarına referans olduğunu görebiliriz. Kod çok okunabilir ve anlaşılır. Bakalım geri aramadan söze bir referansınız varsa.
var $q = angular.injector(["ng"]).get("$q");
console.log($q);
setInterval(function () {
for (var i = 0; i < 10; i++) {
var $d = $q.defer();
(function ($d) {
$d.promise.then(function () {
console.log($d);
});
})($d);
}
}, 10);
![görüntü açıklamasını buraya girin](https://i.stack.imgur.com/ansG3.png)
Yani ilk tahsisattan sonra - bunu da halledebilecek gibi görünüyor :)
Son örneğinin birkaç dakika daha çalışmasına izin verirsek, bazı ilginç GC kalıplarını da görebiliriz. Biraz zaman aldığını görebiliriz - ancak geri aramaları temizleyebilir.
![görüntü açıklamasını buraya girin](https://i.stack.imgur.com/wFB96.png)
Kısacası - en azından modern tarayıcılarda - bunlara dışarıdan referansınız olmadığı sürece çözülmemiş vaatler hakkında endişelenmenize gerek yok