以下函数的哪一部分使其异步?



我正在学习javaScript,刚刚谈到了承诺,异步等待,获取等主题。 在线阅读教程时,将以下代码描述为异步

function loadScript(src) {
let script = document.createElement('script');
script.src = src;
document.head.append(script);
}

我了解到javascript将所有异步工作交给浏览器,例如http请求,因为它们需要时间并且可能会阻塞javascript中的流程。

请向我指出上面的代码是如何异步的? 它的哪一部分是异步的?是因为我们正在使用文档对象吗? 文档对象中的所有方法是否异步并由浏览器处理? 还是别的什么?

这是教程的链接,对不起,如果我误解了什么.https://javascript.info/callbacks

它是异步的,因为您使用srcURL 从服务器获取脚本代码。这必须发送一个网络请求,并且代码不会插入到 DOM 中并执行,直到服务器响应。

修改 DOM 本身是同步的,但许多元素可能会导致网络请求被发送和等待。例如<script><img><iframe>

脚本标记本身需要加载 url,因此这是异步的部分。脚本加载由浏览器处理。

如果您指的是动态创建的script元素的行为就像它们设置了async属性一样,那么规范中概述了这一点:

脚本元素有一个标志,指示该元素是否为"非阻塞"。最初,脚本元素必须设置此标志。HTML 解析器和 XML 解析器在它们插入的脚本元素上未设置它。此外,每当设置了"非阻塞"标志的脚本元素添加了异步内容属性时,必须取消设置该元素的"非阻塞"标志。

。但即使脚本元素没有设置async,源代码的下载仍将异步进行;async只是说"在等待下载时不要阻止进一步的HTML解析或JavaScript执行。注入脚本的代码仍将完成运行,但页面上的任何后续脚本元素都将等待阻止脚本下载。

最新更新