Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 文档头中的脚本是否总是在触发DOMContentLoaded之前执行?_Javascript_Dom_Domcontentloaded - Fatal编程技术网

Javascript 文档头中的脚本是否总是在触发DOMContentLoaded之前执行?

Javascript 文档头中的脚本是否总是在触发DOMContentLoaded之前执行?,javascript,dom,domcontentloaded,Javascript,Dom,Domcontentloaded,在以下文件中 <!doctype html> <html> <head> <script language="javascript" src="example.js"></script> </head> <body> </body> </html> 是否保证执行日志语句?根据 DOMContentLoaded事件在初始HTML文档完全加载和解析时触发,而不等待样式

在以下文件中

<!doctype html>
<html>
  <head>
    <script language="javascript" src="example.js"></script>
  </head>
  <body>
  </body>
</html>
是否保证执行日志语句?

根据

DOMContentLoaded事件在初始HTML文档完全加载和解析时触发,而不等待样式表、图像和子帧完成加载

注意:同步JavaScript暂停对DOM的解析

在您的例子中,您引用外部Javascript文件的方式是将其视为同步的,也就是说,在解析之后的元素之前,将获取并加载该文件

所以,答案是,是的,它将始终执行-只要外部JS文件对浏览器可用


如果您已指示浏览器应尝试异步下载脚本(通过设置为true),则该事件可能会或可能不会触发您注册的回调。

是,请参阅

在浏览器继续解析页面之前,将立即获取并执行没有async或defer属性的脚本以及内联脚本

文档在结束之前不会被完全解析,当它遇到
脚本
标记时,它将停止解析并等待脚本下载(如有必要)并运行,然后继续


这是非常糟糕的-您不想延迟页面的解析和呈现。最好给脚本标记一个
defer
(或
async
)属性——这样,一旦解析完成,它将自动运行,而不需要阻塞,也不需要将整个脚本包装到DOMContentLoaded侦听器中。

你在问什么?你的题目和你的问题主体是两个不同的问题。@Xufox我很困惑。当且仅当“保证执行日志语句”时,“文档头中的脚本总是在DOMContentLoaded激发之前执行”不是这样吗?除非添加
async
defer
属性,否则example.js文件将在主体开始渲染之前加载。。。因此,DOMContentLoaded事件。。。如果你从这里向下滚动一点,就会记录到控制台的综合图表:@ChrisMartin哦,你关心的是
DOMContentLoaded
事件是否总是在定义事件侦听器之后发生?我将“日志语句是否保证执行?”解释为“是否保证触发
DOMContentLoaded
?”。
document.addEventListener('DOMContentLoaded', function () {
    console.log('hello');
});