Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замыкания... почему alert "глючит" ? (https://javascript.ru/forum/misc/60475-zamykaniya-pochemu-alert-glyuchit.html)

callbackhell 02.01.2016 20:35

Цитата:

Сообщение от рони
а у Google Chrome мания всё оптимизировать, так как он считает нужным.

А, где-нибудь в стандарте прописана гарантия, что колбеки должны вызываться в том порядке в котором выброшены?

Keramet 02.01.2016 20:37

Цитата:

Сообщение от callbackhell (Сообщение 402269)
А, где-нибудь в стандарте прописана гарантия, что колбеки должны вызываться в том порядке в котором выброшены?

мне кажется, это было бы логично (я имею ввиду, вызывать в "правильном" порядке

callbackhell 02.01.2016 20:54

Цитата:

Сообщение от Keramet
мне кажется, это было бы логично (я имею ввиду, вызывать в "правильном" порядке

Да нет. Асинхронное программирование оно такое. Нет там гарантии порядка, при необходимости надо синхронизировать, и это логично. Я правда, не знаю, как в JS обстоит, поэтому и спросил.

Keramet 02.01.2016 20:56

Асинхронное - я так понимаю, основанное на событиях, где нет четкого распорядка выполнения команд. но в нашем примере (10раз подряд вывести что-то, ключевое как раз и есть - подряд, по порядку). Было б логично и получить результат в нужном порядке )

callbackhell 02.01.2016 20:58

Keramet,

таймаут -- это тоже событие. Ваши коллбеки выстреливают по этому событию. Просто в js дохрена подковерной возни и противоречивый синтаксис.

callbackhell 02.01.2016 21:05

Keramet,
Чтобы проще было это понять, представьте себе, что у нас есть объект таймаут
Timeout.setTimeout(callback)
//В объект таймаут записывется некий слот, скажем, onTimeout = callback
// а где то на уровне реализации по событию таймаута движок вызывает этот коллбек
onNextTick = function(){Timeout.onTimeout()}

Вот так все реально и происходит, просто многое скрыто от ваших глаз, и это приводит к непоняткам.

Keramet 02.01.2016 21:08

в примере с выводом 10, можно считать вывод числа 2 функцией обратного вызова (ФОВ) к выводу числа 1; вывод 3 - ФОВ от вывода 2 и т.д.?

callbackhell 02.01.2016 21:11

Цитата:

Сообщение от Keramet
в примере с выводом 10, можно считать вывод числа 2 функцией обратного вызова (ФОВ) к выводу числа 1; вывод 3 - ФОВ от вывода 2 и т.д.?

Я вас не понял. Читайте внимательно мой предыдущий пост. То что Вы сказали, к реальности вообще отношения не имеет. У вас на каждой итерации коллбеки из setTimeout кидаются в очередь на событие таймаута, когда событие наступает, они вызываются на уровне реализации, движком.

callbackhell 02.01.2016 21:13

Keramet,
Вы как бы говорите движку: Когда событие наступит вызови вот эти коллбеки.

Keramet 02.01.2016 21:16

Возможно я не совсем корректно выразился:
что такое функция обратного вызова - это функция, которой передаётся управление только после того, как полностью закончит свою работу вызвавшая её функция. правильно?
Я поэтому и спросил, можно ли считать (хотя бы образно), что вывод числа 2 (будем образно считать вывод числа 2 функцией обратного вызова) должен произойти только после того, как произойдет вывод числа 1 (а вывод числа 1 - это функция, по окончанию работы которой вызывается наша ФОВ).
Вух - ни и заплёл я - надеюсь, смысл понятен ;)


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