上面都是 macrotask 的执行情况,对于 microtask 来说,它会在以上每个阶段完成前清空 microtask 队列 , 下图中的 Tick 就代表了 microtask
image
setTimeout(() => {
console.log('timer21')
}, 0)
Promise.resolve().then(function() {
console.log('promise1')
})
对于以上代码来说,其实和浏览器中的输出是一样的 , microtask 永远执行在 macrotask 前面 。
最后来看 Node 中的 process.nextTick,这个函数其实是独立于 Event Loop 之外的,它有一个自己的队列,当每个阶段完成后,如果存在 nextTick 队列,就会清空队列中的所有回调函数,并且优先于其他 microtask 执行 。
setTimeout(() => {
console.log('timer1')
Promise.resolve().then(function() {
console.log('promise1')
})
}, 0)
process.nextTick(() => {
console.log('nextTick')
process.nextTick(() => {
console.log('nextTick')
process.nextTick(() => {
console.log('nextTick')
process.nextTick(() => {
console.log('nextTick')
})
})
})
})
对于以上代码,永远都是先把 nextTick 全部打印出来 。
10. 事件触发的过程是怎样的
事件触发有三个阶段:
window 往事件触发处传播,遇到注册的捕获事件会触发
传播到事件触发处时触发注册的事件
从事件触发处往 window 传播,遇到注册的冒泡事件会触发
事件触发一般来说会按照上面的顺序进行,但是也有特例,如果给一个 **body** 中的子节点同时注册冒泡和捕获事件,事件触发会按照注册的顺序执行 。
// 以下会先打印冒泡然后是捕获
node.addEventListener(
'click',
event => {
console.log('冒泡')
},
false
)
node.addEventListener(
'click',
event => {
console.log('捕获 ')
},
true
)
通常使用 addEventListener 注册事件 , 该函数的第三个参数可以是布尔值,也可以是对象 。对于布尔值 useCapture 参数来说,该参数默认值为 false ,useCapture 决定了注册的事件是捕获事件还是冒泡事件 。对于对象参数来说,可以使用以下几个属性:
capture:布尔值,和 useCapture 作用一样
once:布尔值,值为 true 表示该回调只会调用一次 , 调用后会移除监听
passive:布尔值,表示永远不会调用 preventDefault
一般来说 , 如果只希望事件只触发在目标上,这时候可以使用 stopPropagation 来阻止事件的进一步传播 。通常认为 stopPropagation 是用来阻止事件冒泡的,其实该函数也可以阻止捕获事件 。
stopImmediatePropagation 同样也能实现阻止事件,但是还能阻止该事件目标执行别的注册事件 。
node.addEventListener(
'click',
event => {
event.stopImmediatePropagation()
console.log('冒泡')
},
false
)
// 点击 node 只会执行上面的函数,该函数不会执行
node.addEventListener(
'click',
event => {
console.log('捕获 ')
},
true
)
九、浏览器垃圾回收机制---了解即可
1. V8的垃圾回收机制是怎样的
V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制 。因此,V8 将内存(堆)分为新生代和老生代两部分 。
(1)新生代算法
新生代中的对象一般存活时间较短,使用 Scavenge GC 算法 。
在新生代空间中 , 内存空间分为两部分,分别为 From 空间和 To 空间 。在这两个空间中,必定有一个空间是使用的,另一个空间是空闲的 。新分配的对象会被放入 From 空间中,当 From 空间被占满时,新生代 GC 就会启动了 。算法会检查 From 空间中存活的对象并复制到 To 空间中 , 如果有失活的对象就会销毁 。当复制完成后将 From 空间和 To 空间互换,这样 GC 就结束了 。
- 筑基金丹元婴类修真小说推荐 讲里面有金丹元婴境界是哪部
- 面对非正义行为我们应该怎么做
- 九月份种植的蔬菜有哪些?
- 天涯何处无芳草.何必单恋一枝花 天涯何处无芳草何必单恋一枝花后面怎么说
- 美白面膜用多了会怎么样 美白面膜能天天敷吗?
- 水猴子图片真实图片 水鬼 水里面真的有水猴子存在吗
- 抖音里面最火28首歌 看看你喜爱的歌曲上榜了吗
- 京东帮人下单「京东给别人代下单骗局大揭秘解开神秘面纱」
- 早餐面粉的做法大全 用面粉做早餐有哪些做法
- 口才不好看什么书管用
