Javascript loadasync函数导入的外部脚本何时执行? //从指定的URL异步加载和执行脚本 函数loadasync(url){ var head=document.getElementsByTagName(“head”)[0];//查找文档 var s=document.createElement(“脚本”);//创建一个元素 s、 src=url;//设置其src属性 head.appendChild;//将 }

Javascript loadasync函数导入的外部脚本何时执行? //从指定的URL异步加载和执行脚本 函数loadasync(url){ var head=document.getElementsByTagName(“head”)[0];//查找文档 var s=document.createElement(“脚本”);//创建一个元素 s、 src=url;//设置其src属性 head.appendChild;//将 },javascript,asynchronous,Javascript,Asynchronous,JavaScript:finite Guide引入了这样一个异步加载外部脚本的函数。但是我不知道导入的脚本什么时候执行。一旦加载的脚本完成运行,它就会运行吗?或者,在窗口上的加载事件发生后? 考虑到函数的目的或引入函数的原因,答案不太可能是第一种情况,下面的测试用例演示了: (函数loadasync(url){ var head=document.getElementsByTagName(“head”)[0]; var s=document.createElement(“脚本”); s、 sr

JavaScript:finite Guide引入了这样一个异步加载外部脚本的函数。但是我不知道导入的脚本什么时候执行。一旦加载的脚本完成运行,它就会运行吗?或者,在窗口上的加载事件发生后?
考虑到函数的目的或引入函数的原因,答案不太可能是第一种情况,下面的测试用例演示了:


(函数loadasync(url){
var head=document.getElementsByTagName(“head”)[0];
var s=document.createElement(“脚本”);
s、 src=url;
头.附肢儿童;;
}(“external.js”);
这是一个测试页面。
external.js中的内容:

警报(“执行外部脚本,死循环”);
虽然(正确);

“h1”元素正常渲染,不会被外部脚本造成的死循环阻塞。这意味着导入的外部脚本将在稍后执行,而不是在加载它的脚本完成运行后立即执行。但具体什么时候?

我相信加载后它仍然会立即执行,h1是渲染的,因为加载
js
文件仍然需要时间,而其他人可以完成渲染,我更改您的代码以进行一些测试:

html部分:

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <script type="text/javascript">
        (function loadasync(url) {
            var head = document.getElementsByTagName("head")[0];
            var s = document.createElement("script");
            s.src = url;
            head.appendChild(s);
        }("./js/external.js"));
        window.onload = function() {
            alert("window loaded");
        };
    </script>
</head>
<body>
    <h1>This is a test page.</h1>
    <div id="test">See the page</div>
</body>
</html>
在my broswer中,警报的顺序是执行外部脚本、死循环=>
请参见页面
=>
窗口加载
。 因此,当您执行脚本时,它会将
script
标记添加到头部并开始加载它,而页面的其他部分会继续呈现

但是,当您添加需要加载的内容时,
window.onload
将等待该
script
加载完成


我们可以从警报序列中观察到脚本在加载后立即执行。

我想您可以在这里找到答案:。我还认为,这取决于你的浏览器决定如何处理它。外部脚本一加载就运行。它不等待
window.onload
或任何其他事件。但是加载此脚本可能发生在
window.onload
之后,您对此没有保证。@Jerska谢谢,我会检查它。是的,我尝试了您的代码,它会以相同的顺序发出警报。此外,我发现注入的脚本只有在加载它的标记中的所有脚本完成执行之后才开始执行。如果在onload处理程序之后添加一个死while循环,则外部脚本将永远不会执行,浏览器将挂起而不呈现任何内容。我相信这是因为浏览器是单线程的,所以它需要结束当前作业才能进入下一个作业,而
while(true)将使其无法查看其余页面。
alert("external script executed, dead loop");
var ele = document.getElementById("test");
alert(ele.innerText);