JavaScript执行机制有:1、同步任务(synchronous);2、异步任务(asynchronous)。同步任务指的是:在主线程上排队执行的任务,只有前一个任务执行完毕才能执行后一个任务。所有的同步任务都在主线程上执行,形成了一个执行栈。执行栈的执行顺序是后进先出。
一、JavaScript
JavaScript语言最大的特点就是单线程,即同一时间只能做一件事情,做完一件事情之后才能去做另一件事情。
例如,大家在银行排队取钱,一个窗口工作人员一次只能为一个客户服务,不能同一时间为多个顾客服务,负责就乱套了。JavaScript的单线程与它的用途有密切的关系。作为浏览器脚本语言,JavaScript的主要用途是与用户之间进行交互,以及操作DOM。这决定了它只能是单线程,否则就会带来复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM上添加节点,另一个线程删除节点,这时候浏览器以哪个线程为准来进行工作呢?
所以,为了避免同步的复杂性,从一诞生JavaScript就是单线程,这已经成为了这门语言的核心特征。为了利用多核CPU的计算能力,HTML5提出了Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程的控制,并且不可以操作DOM。所以一切JavaScript版的“多线程”都是通过单线程模拟出来的,这个新标准并没有改变JavaScript单线程的本质。
二、JavaScript的事件循环机制
单线程就意味着所有任务需要排队,前一个任务结束才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等待。我们在浏览页面网站的时候,有一些图片是要通过数据请求之后才能加载显示的,那么我们整个页面是不是要等某一个比较大的图片加载完成之后整个网站才能显示出来呢?这样做显然是不行的,所以JavaScript语言的设计者意识到了这一点,于是将所有的任务分成了两种:
同步任务(synchronous):
同步任务指的是:在主线程上排队执行的任务,只有前一个任务执行完毕才能执行后一个任务。所有的同步任务都在主线程上执行,形成了一个执行栈。执行栈的执行顺序是后进先出。
异步任务(asynchronous):
异步任务指的是:不进入主线程,而是进入“任务队列”的任务。只有“任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
事件循环过程:
同步任务和异步任务分别进行不同的场所,同步任务进入主线程,异步任务进入事件表(Event Table)并且注册函数。
当指定的事情完成之后(例如接受到了Promise对象的返回结果resolve/reject),事件表(Event Table)会将这个函数移入到任务队列(Event Queue)。
主线程内的任务执行完毕之后,回去任务队列(Event Queue)读取对应的函数,移入到主线程执行。
上述过程不断重复,这就是事件循环(Event Loop)
来源:https://blog.csdn.net/m0_47584501/article/details/127219972
延伸阅读
JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。
JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。
文章标题:JavaScript执行机制有什么,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/51619