我的直觉是,它的封装在匿名函数的代码块这样一个好主意:我应该在匿名JavaScript函数中封装功能块吗?
(function() {
var aVar;
aVar.func = function() { alert('ronk'); };
aVar.mem = 5;
})();
因为我不会再需要aVar
,所以我认为垃圾收集器会然后删除aVar
当它超出范围。这是正确的吗?还是口译员很聪明,看到我不再使用该变量并立即清理它?是否有任何理由,如风格或可读性,我应该不是这种方式使用匿名函数?
另外,如果我命名的功能,如:
var operations = function() {
var aVar;
aVar.func = function() { alert('ronk'); };
aVar.mem = 5;
};
operations();
不operations
那么必然留下来,直到它超出范围?或者口译员能否立即知道何时不再需要?
一个更好的例子
我也想澄清,我没有必要在谈论全球范围。考虑看起来像
(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.
})();
我的假设和结论在那里是正确的吗?每当我不打算重用块时,我不应该只将它封装在一个函数中,而是将它封装在一个匿名函数中,以便该函数没有引用并在调用它后被删除,对吗?
只是好奇,有没有考虑内存泄漏? – jebberwocky 2010-09-20 17:03:59