javascript - HTML 页面中的 Javascript 事件循环何时触发?

标签 javascript html dom-events unobtrusive-javascript

我知道 JS 函数(即 setTimeout(function(){...}, TIME) )将其作为参数接收的函数放置在浏览器的事件循环中,并且该事件循环将在处理所有内联/同步 JS 调用后进行处理。

但是当他具有以下 HTML 页面结构时实际会发生什么:

<html>
 <head>
  <script> MANY INLINED SCRIPTS </script>
  <script src="file.js"></script>
  <script> setTimeout(function(){...}, TIME)</script>
   .
   .
   .

页面继续,可能这个结构会不断重复,直到 </html>已达到。

这种情况下事件队列什么时候会被处理?

编辑:我想为我的页面中的脚本创建某种延迟加载程序。我依赖来自其他来源的内容,这些内容仅在 DOM 解析后出现,并且希望能够响应。

最佳答案

每个内联脚本在结束 </script> 后立即处理。找到标签。同样,<script>从服务器将脚本作为单独文件导入的标记在收到文件时进行处理,并且该过程是同步的 - 浏览器在处理之前等待脚本内容(除了查看 <script> 标记的相对较新的“异步”属性 编辑以及 IE 上旧的“延迟”属性,该属性可能会或可能不会按预期工作(感谢@RobG))。

因此,您的内联代码调用 setTimeout()当浏览器看到完整的 <script> 时将运行 block ,然后在给定的毫秒数(大约)过去后将调用传递的函数。您不能过分依赖超时处理的准确性。

除了超时机制之外,还有其他事件:用户交互、ajax 等。从概念上讲,这些事件都通过同一个网关汇集;也就是说,如果您的超时计划运行,但用户提前几毫秒单击了按钮,您的计时器代码将等待按钮处理完成。

关于javascript - HTML 页面中的 Javascript 事件循环何时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729438/

相关文章:

javascript - 从动态表创建数组

javascript - 在 HTML 中的下拉列表元素上添加条件

javascript - 删除后 Highcharts 不显示数据

html - checked=no 在 HTML 复选框中有效吗?

javascript - Amazon S3 POST,事件何时完成?

javascript - 如何使用 ng-repeat 显示 JSON 对象?

css - 如何让这个标题位于页面的中心?

html - 基于 Div 的页面布局 - 百分比与固定像素

javascript - 在时间用完后重新打开 Chrome 时,Chrome 扩展程序警报会关闭吗?

javascript - 检测JS中的双Ctrl键