Операции с dom довольно тяжелые, поэтому когда Вы вызываете изменения в dom браузер их просто складывает и затем применяет все одним разом (своеобразная оптимизация) перед event-loop, то есть, когда текущий поток исполнения завершится
alert - блокирующая операция, поэтому пока она работает (Вы видите окно) поток исполнения завершиться не может