Показать сообщение отдельно
  #86 (permalink)  
Старый 18.04.2009, 17:32
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от kefi
Когда
Когда угодно, если есть доступ непосредственно к объекту. Пример:

var b, c;
function A(x) {
    b = function () { alert(x); };
    c = function () { ++x; };
    b(); //-> 1
    // поменяем значение 'x'
    x = 9;
}

A(1);
b(); //-> 9
// поменяем значение 'x'
c(); 
b(); //-> 10


При создании функции 'b' в [[Scope]] будет навсегда "вшит" объект переменных функции 'A'. Изнутри функции 'b' мы cможем обратиться к именам, связь для которых будет найдена в объекте переменных функции 'A', в примере это имя 'x'. НО! не только функция 'b' может работать с объектом переменных функции 'A', но и сама функция 'A' (что очевидно) и любая другая функция, созданная в 'A' и глубже. Это базовый принцип - объект уникален, ссылок на него может быть много...

Последний раз редактировалось Zeroglif, 18.04.2009 в 17:36.
Ответить с цитированием