JS垃圾回收及eventloop

2020-08-06  本文已影响0人  darkTi

JS垃圾回收

一、什么是垃圾

1、没有被引用的,一般都是垃圾;但是有个特例,比如有三个对象互相引用,形成了一个环,但它们还是垃圾;
2、所有的全局变量都不是垃圾,因为你随时有可能会用到它;
3、局部变量有生命周期,当退出这个函数后,这个局部变量就成了垃圾;它会在每次函数执行的时候再重新声明;

二、浏览器是怎么找到这些垃圾并清除它们的?

具体方法可参考:这里
1、标记清除法
简单来说,就是从全局变量开始,一层一层往下标记,把所有引用到的对象都标记起来,没有标记的清除掉;
2、引用计数法
记录每个对象被引用的次数,每次新建对象,赋值引用的时候加1,删除引用减1,一旦为0就直接回收掉;

Eventloop

一、首先,要说一下JavaScript的单线程
二、宏任务(Macrotask)和微任务(Microtask)
console.log('script start');

setTimeout(function() {
  console.log('setTimeout');
}, 0);

let promise = new Promise((resolve, reject)=>{
    console.log(1)
    resolve()
})
promise.then(function() {
  console.log('promise1');
}).then(function() {
  console.log('promise2');
});

执行结果:

script start
1
promise1
promise2
setTimeout
image.png
上一篇 下一篇

猜你喜欢

热点阅读