附加到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才开始得到支持。对我来说,这有点破坏交易。