Я продолжаю изучать js (вроде как параллельно с golang). Так вот на github есть книга, Node Hero на русском. Там есть много полезной информации и ссылка на видео длительностью в 30 минут. В котором очень подробно объясняется внутренняя работа js. Я посмотрел это видео и вот краткое описание того, как я его понял.
Цикл событий перебрасывает содержимое из очереди задач в стек выполнения. Стек это место где хранятся все функции программы до выполнения. Оттуда они берутся и выполняются по очереди. Однако, кроме стека выполнения существует такая вещь как WebAPI или c++ компилятор в nodejs. Это дополнительная среда выполнения не зависящая от стека. Там функции api выполняются и результат отправляется в очередь задач. Когда стек очищается, из очереди задач берутся функции, отправляются в цикл событий и оттуда по одной в пустой стек на выполнение.
setTimeout(function (){
console.log("Таймаут");
}, 30);
Так например функция setTimeout использует функцию api timer для отсчета времени, после отработки api результат console.log отправляется в стек и выполняется.
setTimeout(function(){
//Какой-то код
}, 0) // Позволяет сделать любой код асинхронным. В принципе можно обернуть в другую функцию для удобства.
P.S. Как-то очень запутано у меня все получилось. В общем вот видео https://www.youtube.com/watch?v=8cV4ZvHXQL4
P.P.S. А вообще я капитально завис с этой ассинхроностью. Как выяснилось в js есть специальный функционал для этого. Однако, я его еще не изучил.