Mi intuición es que es una buena idea para encapsular bloques de código en funciones anónimas como esto:¿Debo encapsular bloques de funcionalidad en funciones JavaScript anónimas?
(function() {
var aVar;
aVar.func = function() { alert('ronk'); };
aVar.mem = 5;
})();
Porque no voy a necesitar aVar
de nuevo, así que supongo que el recolector de basura a continuación, eliminar aVar
cuando sale del alcance. ¿Es esto correcto? ¿O son los intérpretes lo suficientemente inteligentes como para ver que no vuelva a utilizar la variable y limpiarla de inmediato? ¿Hay alguna razón, como el estilo o la legibilidad, que debería no usar funciones anónimas de esta manera?
Además, si nombro a la función, así:
var operations = function() {
var aVar;
aVar.func = function() { alert('ronk'); };
aVar.mem = 5;
};
operations();
qué operations
entonces necesariamente se quiera dar vueltas hasta que se sale del ámbito? ¿O puede el intérprete decir inmediatamente cuándo ya no es necesario?
un mejor ejemplo
También me gustaría aclarar que no estoy hablando necesariamente de alcance mundial. Considere un bloque que se parece a
(function() {
var date = new Date(); // I want to keep this around indefinitely
// And even thought date is private, it will be accessible via this HTML node
// to other scripts.
document.getElementById('someNode').date = date;
// This function is private
function someFunction() {
var someFuncMember;
}
// I can still call this because I named it. someFunction remains available.
// It has a someFuncMember that is instantiated whenever someFunction is
// called, but then goes out of scope and is deleted.
someFunction();
// This function is anonymous, and its members should go out of scope and be
// deleted
(function() {
var member;
})(); // member is immediately deleted
// ...and the function is also deleted, right? Because I never assigned it to a
// variable. So for performance, this is preferrable to the someFunction
// example as long as I don't need to call the code again.
})();
¿Son correctas mis suposiciones y conclusiones? Cuando no voy a reutilizar un bloque, no debería encapsularlo en una función, sino encapsularlo en una función anónima para que la función no tenga referencias y se elimine después de que se invoque, ¿verdad?
solo curiosidad, ¿hay una posibilidad de pérdida de memoria? – jebberwocky