Prendiamo ad esempio questo codice:Un ambito termina quando non viene restituito alcun riferimento?
var test = (function(){
var name = 'rar';
return function foo(){
console.log('test');
};
}());
foo
viene restituito al test
, senza alcun riferimento allaname
del perimetro interno. Cosa succede a name
? È distrutto? O continua a esistere e penzolare con la funzione restituita, ma non è possibile accedervi? Sarebbe il primo caso sia simile a fare quanto segue, come se name
non è mai stato parte dell'equazione ?:
var test = function foo(){
console.log('test');
};
Ecco un altro caso:
var test2 = (function(){
var name = 'rar';
var age = '20';
return function foo(){
console.log(age);
};
}());
age
viene referenziato da foo
e formerà una chiusura . Tuttavia, name
non viene ancora referenziato da nulla. Cosa succede a name
in questo caso? È distrutto? O continua a esistere e penzolare con la funzione restituita, ma non è possibile accedervi?
http://stackoverflow.com/a/864549/2269749 – BlitZ
@CORRUPT Le risposte sembrano indicare che ciò che accade dipende dall'implementazione. Quindi, nel peggiore dei casi, il nome rimarrà, giusto? – Joseph
Sì. I browser hanno diversi motori JS GC, ognuno può agire diversamente in questo caso. Considerare 'name = null' come opzione, per evitare perdite di memoria. – BlitZ