Показать сообщение отдельно
  #6 (permalink)  
Старый 04.10.2014, 19:44
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Где-то была тем про кложи, писали что это замыкание. Замыкание это когда скрепку в розетку. На самом деле это смыкание, смычка.

Div.onclick = function (){
   $('#flying'+i).css({visibility:'visible'});
};


В атрибут onclick записалось то, что вы написали, буквально - текст. Чтобы его исполнить когда придет событие - интерпретатор должен пойти туда, где это текст написан. Следовательно все что написано вокруг этого текста - становится релевантным тому тексту, который записан в атрибуте onclick. В частности там написано что есть такая переменная с именем i, потому что она нарисована глобально. Надо ее взять, прибавить к другому тексту, найти по тому тексту адрес в памяти, по тому адресу... это другая история.

Так вот, когда интерпретатор приходит туда, где этот текст был записан - он берет то, что в этом тексте указано взять, но, к этому моменту под тем же именем в i уже другое значение, из-за событий которые произошли до того как и поменяли значение. Функций у вас 3 штуки, но все они юзают одну и ту же глобальную для них переменную i, групповуха, короче, детектед.

Чтобы юзать ее индивидуально надо написать еще одну кложу как и нарисовано в примере ksa: N это копия i которую закачали через ж-у внутрь функции с текущим на момент закачки значением i. Теперь когда интерпретатор приползет выполнять текст в атрибуте onclick он возьмет указанную N, которая такая же переменная как i, но которую не шевелят всякие там события. В итоге для 3-х функций будет 3 переменных по 1 на каждую.

ЗЫ Я подумал что будет понятнее изобразить i как window.i; Если стопицот функций обращаются к window.i и каждая меняет ее значение как хочет (например как функция plus) то хз что можно ожидать.

Последний раз редактировалось kostyanet, 04.10.2014 в 19:47.
Ответить с цитированием