Цитата:
Цитата:
Но про то, что Вы имели ввиду, тоже ясно, мой пример Выше это наглядно показывает. |
Цитата:
Точней, коллбек сеттится на событие таймера.. Когда событие таймера срабатывает, этот коллбек начинает исполняться. Таймер сам его запускает, но только в том случае, если поток не занят. В противном случае, он кидается в очередь на исполнение. Во время своего исполнения, он также как и любой код блокирует единственный поток. А возвращаясь к тому вопросу, если будет долгий цикл, он просто не даст начать исполняться коллбеку, который назначен на время задержки. Коллбек будет вынужден "ждать", пока цикл отработает. |
Цитата:
А колбэки, получается друг друга не блокируют? Т.к. вывод колбэка одной и той же функции осуществляется вовсе не в порядке поступления запроса. Так? PS: Может я наивные вопросы задаю, но у меня пока трудно всё это в голове укладывается. Интуитивно понимаю, даже уже кое-чего написал, работает, для линейности стадий обработки использовал оборачивание в промисы. Но полной ясности представления ещё нет. :) |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){cb();},1000); var cb = () => console.log(a) работает везде, где имеют место "стрелочные функции" из нового стандарта. ---- Но, возможно, задача была не в этом? здесь по сути мы запустили console.log в другом "тике". Может, надо это сделать в том же "тике", в котором отработали строки 1 и 2? Тогда на 3 строку надо вставить код, который будет не менее секунды прокручивать "цикл очереди сообщений" ноды (подобно тому как модальные окна в винде крутят очередь потока, блокируя вызывающую функцию, но не UI в целом). Можно ли так сделать, судить не берусь. |
Цитата:
"Ловкость рук и никакого мошенничества" (с) :) На сколько я понимаю, данная запись равносильна: a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){cb();},1000); var cb = function() { console.log(a) } Но, тем не менее, решает условие задачи в том виде, как оно представлено. |
Цитата:
a= 0; setTimeout(function(){a= 1},1000) c=console;console={"log":function(){c.log(5);console=c}}; console.log(a) |
Яростный Меч,
Твой код эквивалентен a= 0; setTimeout(function(){a= 1},1000) setTimeout(function(){console.log(a)},1000) Только написан через жопу. Про какие стрелочные функции и новые тики ты говоришь, хз. |
Часовой пояс GMT +3, время: 18:37. |