Следует ли инкапсулировать функциональные блоки в анонимные функции 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();

выполняет операции тогда обязательно торчать, пока не выйдет за рамки? Или переводчик может сразу сказать, когда он больше не нужен?

A Better Example

Я также хотел бы пояснить, что я ' м не обязательно говорить о глобальном масштабе. Рассмотрим блок, который выглядит как

(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.

})();

Верны ли мои предположения и выводы? Когда я не собираюсь повторно использовать блок, я должен не только инкапсулировать его в функцию, но и инкапсулировать в анонимную функцию, чтобы функция не имела ссылок и удалялась после ее вызова, верно?

8
задан Justin Force 20 September 2010 в 17:59
поделиться