Похоже, вы сталкиваетесь с тем фактом, что Javascript является однопоточным, а браузеры - нет.
По сути, вы не можете запускать несколько кусков Javascript одновременно.Тем не менее, браузер все еще должен делать что-то вне выполнения Javascript и продолжает делать это, когда может.Проблема заключается в том, является ли изменение DOM синхронным (т. Е. Выполнение JS прекращается до тех пор, пока оно не выполнено) или асинхронным (выполнение JS продолжается) не определено.Большинство браузеров делают последнее.Но выполнение JS по-прежнему имеет довольно высокий приоритет, и многие обновления DOM откладываются до тех пор, пока выполнение JS не должно остановиться и ждать.Окно предупреждения является отличным примером, поскольку оно ожидает ввода данных пользователем.
Способ сделать то, что вы хотите сделать, - воспользоваться преимуществом setTimeout()
, которое позволяет текущему фрагменту JS завершить, затем браузер можетзавершите обновление DOM, и затем он сможет выполнить JS, ожидая запуска по таймауту.