首先需要了解 栈 js的执行是采用的 先进后出,后进先出的模式
比如
这段代码的执行 ber 压入栈 foo 压入栈 , foo 弹出栈,ber 弹出栈
堆
Js的引用数据类型存放在堆中,就是在硬盘中的一块内存地址。在进行对象,数组,函数的创建时,内存会创建这样一块地址,在进行对象赋值时,其实本质引用的是内存的地址指针,内存地址的引用数会加一,这也就是所谓的浅拷贝,深拷贝是在内存中重新定义了一块内存地址,Js是有内存回收(垃圾回收机制)的,也就是说当一块内存的引用数为0那么就会被自动回收掉(引用记数)详情看mdn内存管理
队列
Js运行的时候都包括了一个执行的消息队列,每一个消息都包含着一个执行消息的回调函数
在 Js 事件循环阶段 运行时会从先进入队列的消息开始处理,被处理过的消息会被移出队列并且执行掉相关的回调函数 被执行的函数都会创建一个新的栈,(大致执行看上文) 函数的执行会一直到 栈 为空为止,然后事件循环会执行下一个消息(假如队列中还有未处理消息的话)
特点:Js的消息队列永不阻塞