Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在document.ready中使用async=true时会发生什么情况?_Javascript - Fatal编程技术网

Javascript 在document.ready中使用async=true时会发生什么情况?

Javascript 在document.ready中使用async=true时会发生什么情况?,javascript,Javascript,当我们在document.ready中调用属性为async=“true”的javascript时会发生什么。比如说, $(document).ready(function() { var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true; ma.src = 'test.js'; var s = document.getElementsByTagName('script')[0]

当我们在
document.ready
中调用属性为
async=“true”
的javascript时会发生什么。比如说,

$(document).ready(function() {
var ma = document.createElement('script');
ma.type = 'text/javascript'; 
ma.async = true;
ma.src = 'test.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ma,s);
});

$(文档)中的脚本。加载DOM后,将立即执行ready
。如果我们将调用脚本的
async=true
放入其中,会发生什么<代码>测试.js将在DOM准备就绪之前加载

通过DOM操作添加的脚本与添加它们的JavaScript不同步,与
async
属性无关

在初始HTML中存在的脚本(在“就绪”之前)或添加多个脚本元素且执行顺序必须与DOM插入顺序匹配时,将发挥更大的作用:

设置此布尔属性以指示浏览器应异步执行脚本(如果可能)

。。脚本插入脚本在IE和WebKit中异步执行,但在Opera和4.0之前的Firefox中同步执行[wrt脚本元素的插入顺序]。。要请求在浏览器[…]中按插入顺序执行脚本插入的外部脚本,请在要保持顺序的脚本上设置
async=false

浏览器将“在元素添加到DOM后的某个时间点”开始加载新脚本元素引用的脚本,并且引用的脚本仅在加载后执行。但是,
insertBefore
会立即返回,并且引用的脚本不能保证被加载—不管
async
设置为什么


在这种情况下,test.js代码保证只在“添加脚本元素后的某个时间点”运行到DOM中——这自然必须在调用ready函数后运行,而ready函数就是添加元素的地方

由于浏览器只有一个执行上下文,并且添加DOM元素是一个异步操作(wrt正在执行的外部脚本),这也意味着test.js中的代码将只在“就绪函数结束后的某个时间”运行。而且,ready函数在响应“DOM ready”调用之前不会启动(或结束)


设置
async
标志(设置为任何值)不会改变上述内容。

否,在DOM就绪之前不会加载test.js,因为上面的所有代码只会在DOM就绪后执行。test.js包含对DOM元素的引用。这段代码不会抛出JavaScript错误'element not found',因为只有在DOM就绪后才会执行它,对吗?这在所有浏览器中都能正常工作吗?@user3090914我已将以前的评论移到了答案中。另外,出于风格偏好,我建议使用
$(函数..)
速记。