首页 >web前端 >前端问答 >javascript是同步的吗

javascript是同步的吗

WBOY
WBOY原创
2022-08-24 17:10:561605浏览

JavaScript是同步的;JavaScript始终是同步的并且是单线程的,只有在可以进行ajax调用的意义上是异步的;同步表示如果正在页面上执行JavaScript代码块,则该页面上当前将不会执行其他JavaScript。

javascript是同步的吗

本教程操作环境:windows10系统、javascript1.8.5版、Dell G3电脑。

javascript是同步的吗

JavaScript始终是同步的并且是单线程的。

如果您正在页面上执行JavaScript代码块,则该页面上当前将不会执行其他JavaScript。

JavaScript仅在可以进行Ajax调用的意义上是异步的。

Ajax调用将停止执行,其他代码将能够执行,直到调用返回(成功或其他)为止,此时回调将同步运行。此时将不会再运行其他代码。它不会中断当前正在运行的任何其他代码。

JavaScript计时器与此相同类型的回调一起运行。

将JavaScript描述为异步可能会引起误解。准确地说JavaScript是同步的且具有各种回调机制的单线程。

jQuery在Ajax调用上有一个选项可以使它们同步(带有该async: false选项)。初学者可能会不正确地使用它,因为它允许使用一种更传统的编程模型,而这种模型可能会更习惯。有问题的原因是此选项将阻止页面上的 所有

JavaScript,直到完成为止,包括所有事件处理程序和计时器。

扩展知识

Javascript语言是一门单线程的语言

单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的。因为浏览器只分配给js一个主线程,用来执行那些函数,一次只能执行一个,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。

JavaScript单线程如何实现异步效果

所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程。宿主环境(浏览器)通过事件驱动方式使得js具备了异步的属性 。

所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。

具体来说,异步运行机制如下:

所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",那些的异步任务,进入执行栈,开始执行。

主线程不断重复上面的第三步。

【相关推荐:javascript视频教程web前端

以上是javascript是同步的吗的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn