附加到dom时的javascript执行顺序
因此,我发现这个链接很好地解释了如何加载脚本: 但我很难理解如果我这样做会发生什么:附加到dom时的javascript执行顺序,javascript,Javascript,因此,我发现这个链接很好地解释了如何加载脚本: 但我很难理解如果我这样做会发生什么: <script> var script = document.createElement("script"); script.src = "//www.domain.com/script.js"; document.getElementsByTagName("head")[0].appendChild(script); </script> <script>
<script>
var script = document.createElement("script");
script.src = "//www.domain.com/script.js";
document.getElementsByTagName("head")[0].appendChild(script);
</script>
<script>
console.log(myVar);
</script>
所以我的问题是。。。由于
script.js
附加在单独的脚本标记中,这是否保证script.js
将在console.log()之前加载和执行 从您链接的网站:
动态创建并添加到文档中的脚本在默认情况下是异步的,它们不会阻止渲染并在下载时立即执行,这意味着它们可能以错误的顺序出现。(强调他们)
这意味着对于通过JavaScript添加到页面的脚本(如上面的示例所示),执行顺序不受保证
如果希望执行具有确定性,则需要手动禁用async
属性:
var script = document.createElement("script");
script.src = "//www.example.com/script.js";
script.async = false; // overwrite the default
document.getElementsByTagName("head")[0].appendChild(script);
在普通脚本中,标记是同步的,因此其阻塞:
<!-- BAD: blocking external script -->
<script src="//somehost.com/some_script.js"></script>
<!-- GOOD: remote script is loaded asynchronously -->
<script>
var script = document.createElement('script');
script.src = "//somehost.com/some_script.js";
document.getElementsByTagName('head')[0].appendChild(script);
</script>
如果异步而不阻塞:
<!-- BAD: blocking external script -->
<script src="//somehost.com/some_script.js"></script>
<!-- GOOD: remote script is loaded asynchronously -->
<script>
var script = document.createElement('script');
script.src = "//somehost.com/some_script.js";
document.getElementsByTagName('head')[0].appendChild(script);
</script>
var script=document.createElement('script');
script.src=“//somehost.com/some_script.js”;
document.getElementsByTagName('head')[0].appendChild(脚本);
或
因此,对于您的情况,不能保证在将var作为允许异步脚本加载的选项之一记录之前加载脚本
嗯,好吧,我想你回答了我的实际问题(所以我相信这一点),但总的来说,我的目标是提出w/a解决方案来保证执行顺序。似乎Opera当前不支持async
属性,直到10年前IE才开始得到支持。对我来说,这有点破坏交易。