Когда JavaScript синхронен?

У меня создалось впечатление для того, что JavaScript был всегда асинхронным. Однако я узнал, что существуют ситуации, где это не (т.е. манипуляции DOM). Существует ли хорошая ссылка где-нибудь о том, когда это будет синхронно и когда это будет асинхронным? JQuery влияет на это вообще?

185
задан Brian 9 January 2010 в 15:02
поделиться

2 ответа

JavaScript всегда синхронный и однопоточный. Если вы выполняете блок кода JavaScript на странице, то ни один другой JavaScript на этой странице в настоящее время не будет выполнен.

JavaScript является асинхронным только в том смысле, что он может, например, вызывать Ajax. Вызов Ajax перестанет выполняться, и другой код сможет выполняться до тех пор, пока вызов не вернется (успешно или иным образом), после чего обратный вызов будет выполняться синхронно. Никакой другой код в этот момент выполняться не будет. Он не будет прерывать любой другой код, который выполняется в данный момент.

JavaScript-таймеры работают с таким же типом обратного вызова.

Описывание JavaScript как асинхронного, возможно, вводит в заблуждение. Точнее сказать, что JavaScript синхронный и однопоточный с различными механизмами обратного вызова.

jQuery имеет опцию на вызовах Ajax, чтобы сделать их синхронными (с опцией async: false). Новички могут соблазниться использовать эту опцию некорректно, так как она позволяет использовать более традиционную модель программирования, к которой можно было бы привыкнуть. Причина, по которой это проблематично, заключается в том, что этот вариант будет блокировать all JavaScript на странице до тех пор, пока он не завершится, включая все обработчики событий и таймеры.

256
ответ дан 23 November 2019 в 05:52
поделиться

JavaScript однопоточный, и все время вы работаете над нормальным синхронным выполнением кода.

Хорошими примерами асинхронного поведения, которое может иметь JavaScript, являются события (взаимодействие с пользователем, результаты Ajax-запросов и т.д.) и таймеры, в основном действия, которые могут произойти в любое время.

Я бы порекомендовал вам обратить внимание на следующую статью:

Эта статья поможет вам понять однопотоковую природу JavaScript и то, как работают таймеры внутренне, и как работает асинхронное выполнение JavaScript.

async

98
ответ дан 23 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: