提问人:Draconar 提问时间:10/4/2012 最后编辑:Brian Tompsett - 汤莱恩Draconar 更新时间:9/13/2020 访问量:479
何时在 HTML 页面中触发 Javascript 事件循环?
When is the Javascript event loop triggered in a HTML page?
问:
我知道 JS 函数(即)将其接收到的函数作为参数放在浏览器的事件循环中,并且此事件循环将在处理所有内联/同步 JS 调用后进行处理。setTimeout(function(){...}, TIME)
但是,当他具有以下 HTML 页面结构时,实际会发生什么:
<html>
<head>
<script> MANY INLINED SCRIPTS </script>
<script src="file.js"></script>
<script> setTimeout(function(){...}, TIME)</script>
.
.
.
然后页面继续,可能这种结构会重复出现,直到到达。</html>
在这种情况下,何时处理事件队列?
编辑:我想为我的页面中的脚本创建某种延迟加载器。我依赖于来自其他来源的内容,这些内容应该只在 DOM 被解析并希望响应后出现。
答:
4赞
Pointy
10/4/2012
#1
找到结束标记后,将立即处理每个内联脚本。类似地,从服务器导入脚本作为单独文件的标签在收到文件时会被处理,并且该过程是同步的 - 浏览器在处理之前等待脚本内容(除了查看相对较新的标签编辑的“async”属性和IE上的旧“defer”属性,它可能曾经或可能不会预测地工作(感谢@RobG))。</script>
<script>
<script>
因此,当浏览器看到完整的块时,将运行带有调用的内联代码,然后在给定的毫秒数(大致)过后调用传递的函数。不能过分依赖超时处理的准确性。setTimeout()
<script>
除了超时机制之外,还有其他事件:用户交互、ajax 等。从概念上讲,这些都通过同一个网关汇集;也就是说,如果计划运行超时,但用户提前几毫秒单击按钮,则计时器代码将等待按钮处理完成。
评论
1赞
RobG
10/4/2012
和(更古老的,IE发明的)defer属性在支持和不被忽略的地方。
评论