JS的运行机制和事件循环及相关拓展(个人笔记)

一、JS的运行机制和事件循环

简单来说JS的运行机制就是事件循环

1.JS的执行顺序

JS代码是从上而下一行一行执行的;
如果某一行执行报错,代码就会停止执行;
先执行同步代码,后执行异步代码。
JS的执行机制

2.同步代码和异步代码的区别

同步代码:调用执行后直接出栈;
异步代码:放到webAPI中,等待合适的时机放入回调队列,等到栈空时进行事件循环开始工作,进行轮询;

异步代码又分为微任务和宏任务:

微任务是在DOM渲染前触发,宏任务在DOM渲染后触发,微任务和宏任务的最主要区别就是:
宏任务是由浏览器规定的:
setTimeout
setInterval
Ajax
DOM事件
微任务是由ES6语法规定的:
Promise.then
async await

3.主要过程

先运行清空调用栈(call stack)中的同步代码,再执行微任务队列中的微任务,尝试DOM渲染,触发事件循环(Event Loop),反复询问回调队列中是否有要执行的语句,有则放入调用栈中继续执行

二、数据结构(栈、堆)

1.栈

访问顺序:栈是一种先进后出,后进先出的数据结构,栈内存用于存放临时变量的一片内存块,它是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶,另外一端称为栈底

存储数据:一般用来存储各种基本数据类型的变量,包括Boolean,Number,String,undefined,Null以及对象变量的指针。

2.堆

访问顺序:堆内存就是内存中单独划出来的一片足够大得空间,用来存储变量,没有规律可研
存储数据:主要负责像对象Object这种变量的存储

3.栈内存和堆内存的优缺点

1.在JS中,基本数据类型变量大小固定,并且操作简单容易,所以把它们放入栈中存储。 引用类型变量大小不固定,所以把它们分配给堆中,让他们申请空间的时候自己确定大小,这样把它们分开存储能够使得程序运行起来占用的内存最小。

2.栈内存由于它的特点,所以它的系统效率较高。 堆内存需要分配空间和地址,还要把地址存到栈中,所以效率低于栈。

4.栈内存和堆内存的垃圾回收

栈内存中变量一般在它的当前执行环境结束就会被销毁被垃圾回收制回收, 而堆内存中的变量则不会,因为不确定其他的地方是不是还有一些对它的引用。 堆内存中的变量只有在所有对它的引用都结束的时候才会被回收。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值