Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2016, 17:30
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Замыкания... почему alert "глючит" ?
Есть 2 фрагмента, каждый из которых через 3 секунды выводит i (от 1 до 10). Но вот почему-то во втором (с alert) порядок нарушен. console.log выводит всё правильно (от 1 до 10.) Почему?
1.
for (var i = 1; i <= 10; i++) {
		(function(e) {
			setTimeout(function() {
				console.log(e);
			}, 3000);
		})(i);
	}


2.
for (var i = 1; i <= 10; i++) {
		(function(e) {
			setTimeout(function() {
				alert(e);
			}, 3000);
		})(i);
	}
Ответить с цитированием
  #2 (permalink)  
Старый 02.01.2016, 17:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
потому что у вас долгая реакция на кнопку ок, а у Google Chrome мания всё оптимизировать, так как он считает нужным.
Ответить с цитированием
  #3 (permalink)  
Старый 02.01.2016, 17:51
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

рони, т.е. на других броузерах alert выдаст всё по порядку?
Ответить с цитированием
  #4 (permalink)  
Старый 02.01.2016, 17:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
да
Ответить с цитированием
  #5 (permalink)  
Старый 02.01.2016, 18:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
уберите for и всё будет по порядку везде и без замыканий
Ответить с цитированием
  #6 (permalink)  
Старый 02.01.2016, 18:35
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от рони Посмотреть сообщение
Keramet,
уберите for и всё будет по порядку везде и без замыканий
т.е. другой цикл использовать?
Ответить с цитированием
  #7 (permalink)  
Старый 02.01.2016, 18:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
одна функция с условием запуска без циклов
Ответить с цитированием
  #8 (permalink)  
Старый 02.01.2016, 18:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
var i = 0;
		(function fn() {
		  i  &&  alert(i);
          i++;
		  i < 11 &&	setTimeout(fn, 3000);
		})();
Ответить с цитированием
  #9 (permalink)  
Старый 02.01.2016, 19:21
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от рони Посмотреть сообщение
Keramet,
var i = 0;
		(function fn() {
		  i  &&  alert(i);
          i++;
		  i < 11 &&	setTimeout(fn, 3000);
		})();
Интересное решение. А зачем в строке 3 i && alert(i);
. Почему нельзя просто alert(i); ? (чтобы ноль не выводить?)
Ответить с цитированием
  #10 (permalink)  
Старый 02.01.2016, 19:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
чтобы первый алерт был не сразу а через 3 секунды
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замыкания, почему функция не видит переменные ruvi Общие вопросы Javascript 5 31.05.2014 17:36
Почему this видно из замыкания? jsuse Общие вопросы Javascript 10 13.02.2012 01:50
Про замыкания Иваннн Общие вопросы Javascript 3 12.01.2011 11:12
хитросплетения Global,контекст,this,Reference kefi Общие вопросы Javascript 109 20.11.2009 23:34
Почему замыкания не работают? alex0071 Общие вопросы Javascript 2 18.08.2009 10:16