Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Объект вызова в $(function(){...}) (https://javascript.ru/forum/jquery/24198-obekt-vyzova-v-%24-function-%7B-%7D.html)

oblomov86 21.12.2011 10:14

Объект вызова в $(function(){...})
 
Решил разобраться с контекстом функции.
Если написать так:
$(function(){
   this.a = 'a';
});

То у объекта document добавится новое свойство a, так как функция выполняется в его контексте.
Теперь пишу так:
$(function(){
   var a = 'a';
});

Я думал, что эти два примера эквивалентны, но это не так. Подскажите: к какому объекту добавляется новое свойство во втором примере?

Nekromancer 21.12.2011 10:30

Во втором случае это не свойство, а переменная, она добавляется в объект переменных. Пользователю он недоступен (кроме глобального объекта, в нём да, this.a и var a почти одно и тоже, почти).

Советую вам почитать про переменные и вообще про javascript, можно начать хотя бы здесь - http://learn.javascript.ru/tutorial/variables

oblomov86 21.12.2011 10:44

Спасибо, буду вникать.

oblomov86 21.12.2011 10:52

Чтобы приведенные примеры были эквивалентны, нужно во втором убрать var.

Nekromancer 21.12.2011 10:54

oblomov86,
Нет. Тогда вы добавить свойство в глобальную область. Это не то.

Nekromancer 21.12.2011 10:55

Читайте тогда это - http://dmitrysoshnikov.com/ecmascrip...riable-object/
А лучше с первой статьи, вот это - http://dmitrysoshnikov.com/ecmascrip...tion-contexts/

oblomov86 21.12.2011 11:37

Насколько я понял:
var a = 'a'; - переменная добавляется в объект переменных контекста исполнения;
a = 'a'; - новое свойство глобального объекта;
this.a = 'a'; - новое свойство объекта, на который ссылается this в текущем контексте исполнения.
Спасибо за науку.

Nekromancer 21.12.2011 11:40

oblomov86,
Пожалуйста :)
Но а = 'a' не всегда новое свойство глобального объекта. Это может быть и так должно быть - новое значение переменной "a", в текущем или в одном из родительских объектов переменных. Если конечно уже переменная была уже объявлена в одном из них, в том числе и глобальном :)


Часовой пояс GMT +3, время: 16:49.