Weźmy na przykład ten kod:Czy zakres kończy się, gdy nie są zwracane żadne odwołania?
var test = (function(){
var name = 'rar';
return function foo(){
console.log('test');
};
}());
foo
zostanie zwrócone test
bez jakichkolwiek odniesień do name
w zakresie wewnętrznej. Co stanie się z name
? Czy to jest zniszczone? Czy nadal istnieje i zwisa ze zwróconą funkcją, ale po prostu nie można uzyskać do niej dostępu? Byłby to pierwszy przypadek podobny do prowadzenia następujących, jakby name
nigdy nie był częścią równania ?:
var test = function foo(){
console.log('test');
};
Oto kolejny przypadek:
var test2 = (function(){
var name = 'rar';
var age = '20';
return function foo(){
console.log(age);
};
}());
age
pobiera odwołuje foo
i będzie stanowić zamknięcie . Jednakże, name
nadal nie ma żadnych odniesień. Co dzieje się z name
w tym przypadku? Czy to jest zniszczone? Czy nadal istnieje i zwisa ze zwróconą funkcją, ale po prostu nie można uzyskać do niej dostępu?
http://stackoverflow.com/a/864549/2269749 – BlitZ
@CORRUPT Odpowiedzi wydają się wskazywać, że to, co się dzieje, zależy od implementacji. Oznacza to, że w najgorszym przypadku "imię" pozostanie, czy to prawda? – Joseph
Tak. Przeglądarki mają różne silniki JS GC, każdy może działać w tym przypadku inaczej. Rozważ "name = null" jako opcję, aby zapobiec wyciekom pamięci. – BlitZ