javascript - 对这段代码中异步如何发生感到困惑
问题描述
我是 JS 新手,正在学习回调以及回调如何发生异步。我在https://javascript.info/callbacks上遇到了代码,它是
function loadScript(src) {
let script = document.createElement('script');
script.src = src;
document.head.append(script);
}
loadScript('/my/script.js');
// the code below loadScript doesn't wait for the script loading to finish
// ...
所以,据说 loadScript 函数是异步执行的,但为什么呢?据我所知,异步发生在通过事件循环执行的 setTimeOut 或 xhr 对象等函数上。那么,为什么我们只在 loadScript 函数中创建元素,它是异步执行的
解决方案
文章中的措辞写得不好。
该函数被称为“异步”,因为动作(脚本加载)不是现在完成,而是稍后完成。
函数调用是同步的。的加载/my/script.js
是异步的,因为 JS 在继续调用堆栈之前不会等待文件加载完毕。使用创建的任何script
元素createElement
都是异步加载的-您可以在此处阅读有关它的更多信息:
动态插入的脚本(使用
document.createElement()
)默认异步加载
下面是一个更好的异步调用示例:
let script = document.createElement('script');
script.src = '/my/script.js';
document.head.append(script);
script.onload = function()
{
// Any code defined inside here is now truly asynchronous.
// It will not be called until /my/script.js has been loaded.
}
推荐阅读
- c++ - 如何在 QML 中显示 QSqlQueryModel?
- bash - 每次编码后移动转换后的文件并在 Ubuntu 上删除原始文件
- entity-framework - 为什么这个 Linq to Entities 查询在网站上实际运行时这么慢
- grammar - 在 ANTLR 中需要匹配的括号
- python - 将十进制时间戳转换为日期时间时如何保留微秒?
- html - 移动视图中的菜单栏切换,不折叠
- python - Python:同步三重任务和常规线程的方法
- javascript - 在 JS 中使用 reduce 进行分组
- android - 为什么不调用此 Firebase 侦听器?
- sapui5 - 如何加载一个新的平铺视图,其中源是来自 json 文件的对象数组