我一直对JavaScript始终是异步的印象。但是,我了解到在某些情况下不是这样(即DOM操作)。关于何时何时同步以及何时异步,有什么好的参考?jQuery会完全影响吗?
JavaScript始终是同步的并且是单线程的。如果您正在页面上执行JavaScript代码块,则该页面上当前将不会执行其他JavaScript。
JavaScript仅在可以进行Ajax调用的意义上是异步的。Ajax调用将停止执行,其他代码将能够执行,直到调用返回(成功或其他)为止,此时回调将同步运行。此时将不会再运行其他代码。它不会中断当前正在运行的任何其他代码。
JavaScript计时器与此相同类型的回调一起运行。
将JavaScript描述为异步可能会引起误解。准确地说JavaScript是同步的且具有各种回调机制的单线程。
jQuery在Ajax调用上有一个选项可以使它们同步(带有该async: false选项)。初学者可能会不正确地使用它,因为它允许使用一种更传统的编程模型,而这种模型可能会更习惯。有问题的原因是此选项将阻止页面上的 所有 JavaScript,直到完成为止,包括所有事件处理程序和计时器。
async: false