Обратный вызов на setTimeout
является асинхронным, поэтому он, вероятно, зарегистрирован для запуска *, но это занимает достаточно много времени, чтобы зарегистрировать, что console.log(3)
успеет выполнить эту точку.
При работес асинхронным кодом вы часто не можете гарантировать точный порядок, в котором он будет выполняться.
* Честно говоря, я не знаю внутреннюю часть setTimeout
, и это, вероятно, будет зависеть от точной реализации, используемой в любом случае,Дело в том, что его обратный вызов выполняется асинхронно.