Показать сообщение отдельно
  #1 (permalink)  
Старый 10.12.2011, 14:39
Аватар для Livanderiaamarum
Профессор
Отправить личное сообщение для Livanderiaamarum Посмотреть профиль Найти все сообщения от Livanderiaamarum
 
Регистрация: 10.12.2011
Сообщений: 290

ОПЕРАТОР ПРИСВАИВАНИЯ ПОЛУЧАЕТ ЗНАЧЕНИЕ ССЫЛКИ?
var foo = {
  bar: function () {
    alert(this);
  }
};
 
foo.bar(); // Reference, OK => foo
(foo.bar)(); // Reference, OK => foo
 
(foo.bar = foo.bar)(); // global?


что происходит в последнем случае? Слева от скобок вызова находится не ССЫЛКА, а РЕАЛЬНОЕ ЗНАЧЕНИЕ ФУНКЦИИ. Но почему? Что поэтапно происходит? Как работает оператор присваивания? И что возвращают скобки " (foo.bar = foo.bar) " ? слева направа он работает или справа налево? Я думал что оператор смотрит что справа ссылка, достает ЗНАЧЕНИЕ обьекта из памяти по той ссылке. Генерирует новую ссылку относительно левого операнда, и кладет эту ссылку в левый операнд. И если все это дело взять в скобки, то скобки (которые не получают значение по ссылкам, а оставляют ссылки ссылками), то скобки должны вернуть левый операнд, а в нем лежит ссылка)), а у нас получается что возвращается не ссылка а РЕАЛЬНОЕ ЗНАЧЕНИЕ по ссылке. (в нашем случае это функция. (реальность значения, и то что оно не ссылка я определил по значению this, которое приняло значение глобального обьекта, а не базы ссылки, и такое происходит только если слева от скобок вызова реальное значение " VALUE() ", а не ссылка " REFERENCE() " ) )
а КАК НА САМОМ ДЕЛЕ работает оператор ровно что и как он достает и.т.п.)?
И почему в данном случае мы получаем реальное значение функции, а не ссылку на неё?

Последний раз редактировалось Livanderiaamarum, 10.12.2011 в 14:50.
Ответить с цитированием