Javascript 延迟属性和onload事件

Javascript 延迟属性和onload事件,javascript,Javascript,代码如下: <html> <head> <script> function elem_onload() { console.log("elem_onload"); }; </script> </head> <body onload="elem_onlo

代码如下:

<html>
    <head>  

        <script>            
            function elem_onload() {
                console.log("elem_onload");
            };      
        </script>

    </head>

    <body onload="elem_onload()">       
        <script type="text/javascript" src="script.js" defer></script>      
    </body>
</html>
“延迟”属性似乎不起作用。输出为:

external script
elem_onload
无论是否具有“延迟”属性。不是吗

elem_onload
external script 
是否定义了延迟

重复回答!? 我想声明,我的答案与你的答案不同

参考的推荐答案是关于内联脚本,其中浏览器行为对我来说是明确的-它只是忽略
defer
。我的问题是关于外部脚本,在这种情况下,浏览器应该执行外部延迟脚本

在文档被解析之后

正如文档所述,因此在
onload
事件之后


所以我在等待一个合适的答案…

在()被激发之前,即当初始HTML文档被完全加载和解析时,执行由
defer
属性延迟的外部脚本。另一方面,
标记上的
onLoad
属性仅在网页完全加载时激发

因此,defer属性确实有效。您可以通过尝试以下两种情况来测试它。在这两种情况下,script.js文件的内容应如下所示:

console.log(document.getElementById('sample').innerHTML);
案例1 HTML-带有
延迟
-->记录“示例文本”

Thx。一切都需要帮助

因此,原始文档中的语句“…在文档被解析后”。() 指的是第0步

当文档被完全解析时,现在有几个任务需要完成。这些任务包括运行外部延迟脚本 在
onload
事件之前(#3)


我说得对吗?

:“使用这些属性可以选择三种可能的模式。如果存在async属性,则脚本将在可用时立即执行,但不会阻止对页面的进一步解析。如果不存在async属性,但存在defer属性,则在页面完成解析后执行脚本。如果两个属性都不存在,那么在用户代理继续解析页面“因此您建议”onload之前,将立即获取并执行脚本“事件总是在页面被解析后触发,因此在延迟脚本之后?请尝试在
元素加载
结束时设置
类型
src
:步骤3。执行所有延迟的脚本;第四步。火灾
DOMContentLoaded
。。。步骤7:激发
load
事件在激发
DOMContentLoaded
之前执行这些事件在此处定义顺序->是。加载事件在第7步触发。
console.log(document.getElementById('sample').innerHTML);
<body onLoad="elem_onload()">       
<script type="text/javascript" src="script.js" defer></script>    
<div id="sample">Sample text</div>
</body>
<body onLoad="elem_onload()">       
<script type="text/javascript" src="script.js"></script>    
<div id="sample">Sample text</div>
</body>