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我已将以前的评论移到了答案中。另外,出于风格偏好,我建议使用$(函数..)
速记。