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 по отношению к внешнему объекту переменных?