概述
本教程操作环境: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是同步的吗的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是舒服招牌为你收集整理的javascript是同步的吗的全部内容,希望文章能够帮你解决javascript是同步的吗所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复