JS执行机制

简介: JS是单线程JS是单线程的,也就是说JS代码是按顺序执行的,一行一行执行的,不会出现同时执行多行代码的情况。也就是JavaScript同一时间内只能做一件事情,如果有多个任务,就必须排队,前一个任务结束,才能执行后一个任务。(比如我们对某个DOM元素进行添加删除操作室,不同同时进行,要按照顺序执行)

JS的执行机制

JS是单线程

JS是单线程的,也就是说JS代码是按顺序执行的,一行一行执行的,不会出现同时执行多行代码的情况。

也就是JavaScript同一时间内只能做一件事情,如果有多个任务,就必须排队,前一个任务结束,才能执行后一个任务。(比如我们对某个DOM元素进行添加删除操作室,不同同时进行,要按照顺序执行)

这样就会导致一个问题:如果js执行时间过长,就会给用户一种页面加载很慢的感觉(页面渲染不连贯,页面加载阻塞)。

为了解决这样一个问题,HTML5提出了Web Worker标准,允许JavaScript脚本创建多个线程,于是出现了JS的同步和异步。

同步

同步就是按照顺序执行,前一个任务结束,才能执行后一个任务。

程序执行的顺序与代码的顺序是一致的、同步的。

同步任务都放在主线程上执行,形成了一个执行栈

console.log('1');
    setTimeout(function(){
        console.log('2');
    },0);
    console.log('3');
复制代码

在上面的代码中,同步任务有:

同步任务
console.log('1');
setTimeout(function(),0);
console.log('3');

其中setTimeout里面的函数异步任务,它会在主线程上执行完同步任务后,将异步任务放到任务队列中,等待主线程空闲后,再执行。

异步

异步就是不按照顺序执行,前一个任务结束,不一定要执行后一个任务。

JavaScript的异步是通过回调函数来实现的。

异步任务我们放在任务队列(消息队列)里面。

常见的异步任务有以下三类:

  • 普通事件:比如click、scroll、mousemove等
  • 资源加载:比如图片加载、音频加载、文件加载等
  • 定时器:比如setTimeout、setInterval等

二者的本质区别就是在程序在条流水线上各个流程的执行顺序不同。

执行机制

  1. 先执行执行栈里面的同步任务
  2. 如果遇到异步任务,就将异步任务放到任务队列中。继续执行下面的同步任务。
  3. 当执行栈里面的同步任务执行完毕,就会将任务队列里面的异步任务按照次序放到执行栈中执行。

在主线程将异步任务添加到任务队列的过程中,有一个异步进程处理,当带有异步任务的同步任务执行完毕之后才会添加到任务队列中。

当主线程执行完毕之后,会去任务队列中取出异步任务,放到执行栈中执行。去任务队列获取异步任务的这个过程,会一次又一次的执行。

也就是主线程不断的重复获得任务、执行任务、再获取任务、在执行任务、、、,这种机制就被成为事件循环


相关文章
|
2月前
|
存储 JavaScript 前端开发
深入理解JavaScript中的事件循环(Event Loop):机制与实现
【10月更文挑战第12天】深入理解JavaScript中的事件循环(Event Loop):机制与实现
109 3
|
3月前
|
JavaScript 安全 前端开发
乾坤js隔离机制
乾坤js隔离机制
|
1月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
1月前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
35 1
|
25天前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
2月前
|
移动开发 JavaScript 前端开发
【JavaScript】JS执行机制--同步与异步
【JavaScript】JS执行机制--同步与异步
24 1
|
2月前
|
JSON JavaScript 中间件
深入浅出Node.js中间件机制
本文将带你探索Node.js中一个核心概念——中间件机制。我们将通过浅显的语言和生动的比喻,揭示中间件如何作为请求和响应之间的“交通枢纽”,在应用程序中起到至关重要的作用。从基础原理到实际应用,你将了解到中间件不仅简化了代码结构,还提高了开发效率,是Node.js开发不可或缺的一部分。
54 1
|
2月前
|
JavaScript 前端开发 开发者
原型链深入解析:JavaScript中的核心机制
【10月更文挑战第13天】原型链深入解析:JavaScript中的核心机制
38 0
|
2月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第4天】在探索Node.js的海洋中,中间件机制犹如一座灯塔,为开发者指引方向。本文将带你一探究竟,从浅入深地理解这一核心概念。我们将通过生动的比喻和实际代码示例,揭示中间件如何在请求和响应之间搭建桥梁,实现功能的扩展与定制。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
59 0
|
3月前
|
缓存 JavaScript 前端开发
常见的 JavaScript 隔离机制
常见的 JavaScript 隔离机制
下一篇
DataWorks