Open xxleyi opened 4 years ago
一道结合 click 触发时机和 Promise 的有趣题目,本质原因也是 ScriptJob 能够建栈。
<!DOCTYPE html>
<html>
<body>
<a id='link' href='http://www.google.com'>link</a>
</body>
<script>
const link = document.getElementById('link')
const nextTick = new Promise(resolve => link.addEventListener('click', resolve))
nextTick.then(e => {
e.preventDefault()
console.log('e.preventDefault()')
})
link.addEventListener('click', () => console.log('click link'))
// 用或不用此处的 click,行为表现是否一致?为什么不一致?
link.click()
</script>
</html>
JS 异步代码执行顺序问题:
最后以一篇强悍的 blog 收尾:Tasks, microtasks, queues and schedules - JakeArchibald.com
除了未涉及
await
之外(那时候还没有),将其他几种异步讲解的异常清晰,还配有动画图示。In summary:
包圆版,两种情况:
关键点: