Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Инкапсуляция, чтение файла и event в firefox (https://javascript.ru/forum/events/30819-inkapsulyaciya-chtenie-fajjla-i-event-v-firefox.html)

danik.js 31.03.2013 22:18

Все правильно понял :))

platedz 31.03.2013 22:26

Так а почему, без дополнительной функции с return срабатывает неверно?

Aetae 31.03.2013 22:45

Цитата:

Сообщение от danik.js (Сообщение 243615)
Все правильно понял :))

Не, судя по вопросу - ничего не понял, просо заюзал готовый код.)

Цитата:

Сообщение от platedz (Сообщение 243614)
Не ясно только, почему не выходит так

for(var i=0; i<document.getElementsByName("my_name").length; i++)
{
	document.getElementsByName("my_name")[i].onkeyup = function(x)
	{
		console.log(x)
	}(i)
}


Буду благодарен за разъяснения

Это равносильно:
for(var i=0; i<document.getElementsByName("my_name").length; i++)
{
	function tempFunc(x){
		console.log(x)
	}
	var tempVar = tempFunc(i);
	document.getElementsByName("my_name")[i].onkeyup = tempVar;
}


Т.о. функция tempFunc выполняется сразу же(при этом записывая в console.log i из текущей итерации), а в onkeyup попадает результат её исполнения. Т.к. в temp нет return - она возвращает undefined, соответственно onkeyup == undefined, и при событии ничего не происходит.

danik.js 31.03.2013 22:48

Я вобще то об этом:
Цитата:

Сообщение от Aetae
делать не рекомендуется, ибо каждую итерацию цикла...

Цитата:

Сообщение от platedz
Большое спасибо.
Посмотрел пример и вышло так...


platedz 31.03.2013 23:24

Спасибо за разъяснение. При return возвращается функция. А без return значение. Не ясно мне только, почему значение возвращается сразу, ведь событие еще не произошло.

Aetae 01.04.2013 03:30

Потому что временная функция вызывается сразу на месте.
() после фукции означают её вызов. Если не писать скобочек - вызова не будет. Будет присвоена сама функция, а не возвращённый результат. В js всё просто, всё действует именно так, как написано.))

Таки рекомендую внимательно прочитать статью замыкания. Если даже после внимательного прочтения будет всё ещё не понятно, рекомендую сделать поиск по форуму по словам "замыкания"/"замыкание" и начать читать темы по порядку до полного понимания. Я серьёзно, там не так уж много текста для того кто действительно хочет разобраться в теме. Этот вопрос неоднократно разбирался на данном форуме, порой очень и очень подробно.


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