理解添加包含javascript资源的html时的JS加载

理解添加包含javascript资源的html时的JS加载,javascript,Javascript,我最近在附加一个包含的HTML块时遇到了一个问题,这让我摸不着头脑。我创建了一个示例来说明这个问题(或者我应该说我对JS的理解很差) 将下面的html块添加到页面时,脚本“gHnukrbe.js”的实际加载和执行似乎会延迟。加载的脚本是一个“jwplayer cloud player”,它定义函数jwplayer。当代码被执行时,它输出是否声明了jwplayer?未定义 <div id="output"> <script type="text/javascript"

我最近在附加一个包含
的HTML块时遇到了一个问题,这让我摸不着头脑。我创建了一个示例来说明这个问题(或者我应该说我对JS的理解很差)

将下面的html块添加到页面时,脚本“gHnukrbe.js”的实际加载和执行似乎会延迟。加载的脚本是一个“jwplayer cloud player”,它定义函数
jwplayer
。当代码被执行时,它输出
是否声明了jwplayer?未定义

<div id="output">
  <script type="text/javascript" 
          src="https://cdn.jwplayer.com/libraries/gHnukrbe.js"></script>
  <script>
    $("#output").append("<p>is jwplayer declared? " + typeof jwplayer + "</p>");
  </script>
</div>
所以我试图弄清楚浏览器在这种情况下是如何加载脚本的,因为我有这样的印象,解析器会在执行任何其他javascript之前停止加载JS文件,但现在它显然正在这样做

(欢迎提供带有更深入解释链接的最少答案!)

编辑 更神秘的是,如果JS文件托管在加载页面的同一台服务器上,那么这个问题就不会出现。不幸的是,我无法在JSFIDLE上显示这一点

默认情况下,动态创建并添加到文档中的脚本是异步的,它们不会阻止呈现并在下载时立即执行,这意味着它们可能以错误的顺序出现

我们可以显式地将它们标记为非异步。但是,添加
async='false'
不起作用。就像
不会取消选中该框一样。您必须以编程方式创建脚本元素,而不是附加一块HTML


完整解释如下:

Hi@Augusto,正如David Lin指出的,现在刚刚尝试过,将
async
属性设置为
false
对于加载页面后插入的脚本元素似乎不起作用。所以我删除了我的答案。这是一个很好的答案:D。非常感谢你花时间和精力来回答它!!!-非常感谢!谢谢你,大卫。在发布这个问题之前,我确实快速浏览了一下那个页面,但由于它在2013年发布,我认为它“过时”了。。。但在浏览器世界中,JS加载看起来仍然有点混乱。再次感谢!
setTimeout(function() {
    $("#output")
      .append("<p>is jwplayer declared T+5s? " + typeof jwplayer + "</p>");
    }, 5000);