Что такое синхронность
Что проверяют
Понимаете ли вы модель выполнения JavaScript: один поток, цикл событий, две очереди задач. За вопросом почти всегда стоит практика: почему интерфейс замирает и что нельзя делать в основном потоке.
Как отвечать
Синхронный код выполняется по шагам, каждый следующий после предыдущего. Пока он работает, браузер не обработает ни клик, ни перерисовку: стек занят.
Асинхронность в JavaScript это не параллельное исполнение. Таймер, сетевой запрос и обработчик события отдают работу платформе, а их продолжение попадает в очередь и запускается, когда стек освободится.
console.log(1);
setTimeout(() => console.log(4), 0);
Promise.resolve().then(() => console.log(3));
console.log(2);Порядок будет 1, 2, 3, 4: микрозадачи промисов разбираются до следующей макрозадачи. Умение объяснить этот порядок и есть то, ради чего вопрос задают.
Назовите и по-настоящему синхронные вещи, опасные для отзывчивости: alert, обращения к localStorage, чтение геометрии элемента сразу после изменения стилей, длинный цикл разбора данных. Настоящий параллелизм в браузере даёт только Web Worker: у него свой поток и обмен сообщениями.
Где спотыкаются
Называют асинхронность параллельностью. Колбэк таймера выполняется в том же единственном потоке, и пока стек занят вычислением, он просто ждёт своей очереди.
Считают, что setTimeout(fn, 1000) вызовет функцию ровно через секунду. Это минимальная задержка: запуск случится не раньше, чем освободится стек, а в фоновой вкладке браузер дополнительно загрубляет таймеры.
Ставят тяжёлый разбор данных в обработчик и списывают подвисание на медленное устройство. Такую работу режут на части, отдают в Worker или переносят на сервер, а в основном потоке оставляют только отрисовку.