dmitriymar,
Я вообще говорю про асинхронность выполнения кода. Асинхронность очереди это что-то, что вы притянули к обсуждению не очень понятно зачем, ведь это уже издержка реализации. К тому же это не везде верно. Опять же гарантировано неверно это в Node.js и клиентском коде по крайней мере в chrome и firefox. Проверить кухонный комбайн и IE у меня возможности в данный момент нет. Но даже если "очередь" формируется и потом выполняется шаг за шагом, если она сформирована асинхронно, по требованию, то это означает асинхронность кода.
В контексте обсуждения не важно, какой таймаут сработает первым. Важно только то, что alert(0); сработает в начале.
setTimeout(function() { alert(1); }, 1);
setTimeout(function() { alert(2); }, 0);
alert(0);