为啥我setTimeout里的alert出来后页面还是没有渲染出来呢?

来源:5-9 -浏览器和nodejs事件循环(Event Loop)有什么区别-浏览器

Candy3610866

2022-05-30

如下图, setTimeout里的alert出来后,页面仍然没有渲染出来。
图片描述

只有当alert点完确定后,页面才渲染:

图片描述
和浏览器版本版本有关系吗,当前版本:
图片描述
代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    const p = document.createElement("p")
    p.innerHTML = "一些文字"
    document.body.appendChild(p)
    const list = document.getElementsByTagName("P")
    console.log("len:", list.length)

    console.log("start")
    setTimeout(() => {
      const list = document.getElementsByTagName("P")
      console.log("setTimeout len:", list.length)
      alert("阻塞 timeout")
    })

    Promise.resolve().then(() => {
      const list = document.getElementsByTagName("P")
      console.log("promise len:", list.length)
      alert("阻塞 promise")
    })
    console.log("end")

  </script>

</body>

</html>
写回答

1回答

双越

2022-05-31

这跟页面规模大小有关系。

浏览器会做出判断,如果页面很小,浏览器就简单粗暴的“一次性”渲染。如果页面规模很大,浏览器就会优化渲染策略。

0
0

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程