как думаете , при setTimeout(foo, 5000)
функция foo сразу попадает в очередь событий ?
Не знаю что вы имеет ввиду под "очередь событий" но насколько я знаю порядок будет такой:
1. Вызов setTimeout
2. Браузер запланирует передачу выполнения коллбэка через указанное время
3. Когда выремя выйдет - поместит выполнение коллбэка в очередь макрозадач
4. В порядке очереди коллбэк попадкт в цикл событий, где и выполниться.