Да, так работает IE. По сути, браузеры работают так:
while (stillRunning()) {
renderDOM();
getNextInputEvent();
runScripts();
}
Другими словами, вы не обновите DOM, пока не закончатся скрипты. Теперь даже IE будет обновлять DOM вне последовательности в некоторых случаях (в голову приходит только запуск alert () или verify ()), но обычно это не так. Другие браузеры иногда обновляют DOM не по порядку, и это то, с чем вы сталкиваетесь: случай, когда ваши браузеры, отличные от IE, обновляют DOM, несмотря на то, что все еще застряли в стадии выполнения скрипта (потому что вы делаете синхронный вызов, это не завершает сценарий, пока вы не получите возвращаемое значение).
Когда вы запускаете его асинхронно, конечно, браузер не застревает в стадии выполнения скрипта, поэтому он может обновлять пользовательский интерфейс.
Именно поэтому большинство веб-приложений используют асинхронные вызовы; потому что их выполнение не замораживает ваш интерфейс.