Показать сообщение отдельно
  #28 (permalink)  
Старый 09.10.2014, 22:53
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

var makeDonkey = function() {
   var name = "Ослик Иа";

   return {
 sayHi: function() {
         alert(name);

       },
       yell: function() {
         alert('И-а, и-а!');
       }
   };
}

var donkey = makeDonkey();
donkey.sayHi();


Вопрос:
Удалится ли переменная name из памяти при выполнении delete donkey.sayHi? Если нет — можно ли к name как-то обратиться после удаления donkey.sayHi?

Ответ:
Нет, name не удалится из памяти, поскольку несмотря на то, что sayHi больше нет, есть ещё функция yell, которая также ссылается на внешний объект переменных. Этот объект хранится целиком, вместе со всеми свойствами.
При этом, так как функция sayHi удалена из объекта и ссылок на нее нет, то больше к переменной name обращаться некому. Получилось, что она «застряла» в памяти, хотя, по сути, никому не нужна.

к чему свойство возвращаемого объекта yell: в данном случае ссылается через SCOPE по отношению к внешнему объекту переменных?
Ответить с цитированием