Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обход элементов each + setTimeout (https://javascript.ru/forum/jquery/52453-obkhod-ehlementov-each-settimeout.html)

nikolayseo 20.12.2014 09:56

Обход элементов each + setTimeout
 
$(".announce-name:visible").each(function() {

	tthis = $(this);
	setTimeout(function() {
		console.log(tthis.text());
	}, 5000);
	
});


В итоге выводится сразу последний элемент в наборе. Как сделать паузу в 5 секунд при обходе списка элементов?

Заранее спасибо!

MallSerg 20.12.2014 10:27

по тому что setTimeout это функция
т.е. то что ты пишешь в скобках это параметры этой функции они вычисляются в момент вызова данной функции
вызов функции ни как не тормозит выполнения кода просто когда то в далеком будущем наступит событие timeout
и будет выполнен первый параметр функции setTimeout (c)

Попытаюсь объяснить совсем на пальцах
небольшой пример «setTimeout ( a + b , 100 )»
это вызов функции в котором первым параметром идет JS выражение и оно будет вычислено еще до вызова функции
В случае «setTimeout ( function () {} , 100 )» первым параметром тоже идет выражение и оно так же будет вычислено (интерпретировано) до вызова setTimeout результатом вычисления данного выражения будет функция
т.е. по пунктам:
1. вычисляется выражение JS (выражение возвращает безыменную функцию)
2. происходит вызов setTimeout
3. наступает событие timeout в котором происходит вызов безымянной функции (c)


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