Javascript setTimeout何时开始在内联中执行<;脚本>;

Javascript setTimeout何时开始在内联中执行<;脚本>;,javascript,html,timeout,Javascript,Html,Timeout,假设我有这样的代码 <html><body> <bunch of html tags...> <script> function myF()={}; setTimeout(myF, 100); </script> <lots of more html goes here.....></body></html> 函数myF()={}; 设置超时(myF,100); 据我所知,脚

假设我有这样的代码

<html><body>
<bunch of html tags...>
<script>
     function myF()={};
     setTimeout(myF, 100);
</script>
<lots of more html goes here.....></body></html>

函数myF()={};
设置超时(myF,100);

据我所知,脚本将在解析html时进行计算。但是,在本例中,我们有一个setTimeout,然后是大量的html解析。超时何时才能发出呼叫?它是否需要等到所有html解析完成后才最终调用myF,或者在超时事件发生时是否会调用myF,即使需要完成更多的html解析?

不要依赖于此
setTimeout
不创建“中断”,可以说,它只是将函数添加到队列中,当浏览器决定检查它时,该队列将被检查。这可能在线程循环的末尾,也可能在HTML解析期间

进一步阅读JavaScript定时器:


等待HTML完成解析的更好(标准)方法如下:

<html><body>
<bunch of html tags...>
<script>
    function myF()={};
    document.addEventListener("DOMContentLoaded", myF);
</script>
<lots of more html goes here.....></body></html>
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<bunch of html tags...>
<script>
    function myF()={};
    $(myF);
</script>
<lots of more html goes here.....></body></html>

函数myF()={};
文件。添加的文件列表(“DOMContentLoaded”,myF);
或者,使用jQuery,如下所示:

<html><body>
<bunch of html tags...>
<script>
    function myF()={};
    document.addEventListener("DOMContentLoaded", myF);
</script>
<lots of more html goes here.....></body></html>
<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<bunch of html tags...>
<script>
    function myF()={};
    $(myF);
</script>
<lots of more html goes here.....></body></html>

函数myF()={};
美元(多年筹资);
否,setTimeout()不一定要等待加载DOMContentLoaded 如果有,我们就不需要
DOMContentLoaded
事件,但如果这还不足以说服您,下面是确凿的证据:


addEventListener('load',function()){
警报(“窗口加载”);
});
document.addEventListener('DOMContentLoaded',function(){
警报(“加载的DOM内容”);
});
setTimeout(函数(){
警报(typeof jQuery=='function'?'jQuery-Loaded':'jQuery-Not-Loaded');
}, 15);
此内容将在获取jQuery之前加载

文件。写(“”); 警报(“加载后”);
在获取jQuery之后,才会加载此内容。

并不是说这是一个毫无意义的问题,但如果有人想保证回调何时发生,他们会使用,或者超时不会中断当前“线程”,那么它不会等到解析HTML之后再加载吗?不管怎么说,你问这个问题是出于兴趣,还是出于某种原因,它在你的页面上真的很重要?(在这种情况下,可能有更好的方法来做你正在做的事情。)是的,这对我很重要,是的,可能有更好的方法来做事情。@PatrickRoberts我正在努力确保我的答案是正确的。对于
setTimeout
的规则如何实际工作,您有任何参考资料吗?我是根据经验来回答的,但是您的测试似乎表明它可以在解析过程中运行<代码> SETTIMEOUT。他问什么时候“所有的html解析都完成了”,但浏览器可能在解析之后但在运行DOMContentLoaded事件处理程序之前运行超时并不是不可想象的。@nnnnnnnn好的,所以我用
window.onload
将所有引用切换到
document.onDOMContentLoaded
,答案是一样的。那会让你更快乐吗?无论它是
onload
还是
domcontentload
,都没有关系。OP问它是否必须等待“直到所有html解析完成”,不管我使用哪个事件,答案仍然是“否”。“这会让你更快乐吗?”不。因为它仍然在测试正在运行的事件处理程序的时间,而不是解析完成的时间。(但正如我在问题下所评论的,如果这对OP的代码来说真的很重要,那么可能有更好的方法来做事情。)@nnnnnn我想你可能误解了这个问题(或者我是,但因为我似乎与@Clonkex在同一页,我不这么认为),但问题是
setTimeout
的回调是否必须在解析完成后发生。如果您的论点是,
DOMContentLoaded
是错误的事件,并且
onload
更正确,那么这并不重要,因为
DOMContentLoaded
总是发生在
onload
之前,并且
setTimeout
会在这些事件发生之前回调。嗯。。我有点明白你的意思,我觉得非常挑剔,但是你的抱怨很容易解决,等等。