html中代码
<div class="po">32wewe</div>
JavaScript代码
var po = document.querySelector('.po')
var op = 0
for (var k = 0; k < 3; k++) {
setTimeout(function () {
console.log(k)
}, 0)
}
var p;
for (var i = 0; i < 999999666; i++) {
p = i
}
console.log(p)
po.addEventListener('click', function (e) {
console.log(++op)
})
po.click()
console.log('主线程结束')
如果主线程在执行的时候,我疯狂点击po元素,最后setTimeout永远都是最后显示,即使在这里立即执行click也是,看了别人写的文章关于js的events loop,难道我没理解到其中的深意?上面所说的情况都是在谷歌下测试的
正常情况下的输出应该是
setTimeout
的时间参数默认最小值是4ms
,而且setTimeout
的函数会被推入到事件队列中,等待主线程执行完毕后再加入到执行栈执行。同样的,
click
触发的事件也是先加入事件队列,等待主线程内全部执行完毕后再按次序加入执行栈执行。具体的你还是看这篇文章吧,一句两句讲不清楚。