将外部javascript导入html

Ash*_*win 1 html javascript

浏览器在为html页面导入外部javascript时首先做了什么?它是否尝试编译它?
我问了这个问题,因为当我尝试首先导入cluetip jquery js文件然后导入Jquery.js文件时出现异常.

这有效:

<script src="/pollweb1/jquery.js" type="text/javascript"></script>
<script src="/pollweb1/jquery.cluetip.js " type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)



这不起作用:

<script src="/pollweb1/jquery.cluetip.js " type="text/javascript"></script>
<script src="/pollweb1/jquery.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)


我可以看到,为了使jquery.cluetip.js工作,它需要jquery.js文件.但为什么订单很重要?浏览器是否在导入javascript文件后尝试编译它?

Kev*_*sox 6

该顺序很重要,因为该cluetip.js文件具有依赖性,jquery.js浏览器按照遇到的顺序加载脚本.当浏览器尝试加载cluetip.js脚本时,它会尝试使用这些依赖项.由于没有加载jQuery,依赖于jQuery的语句失败.

另外,Javascript是一种解释型语言,脚本从未实际编译过.这就是为什么你在发生故障时在运行时发现大多数错误的原因,如果它被编译,你会在访问你的网页之前收到错误提醒.当浏览器遇到脚本时,它开始执行它.大多数情况下,任何实际操作都会被延迟,直到页面被加载为止,因此前几个任务主要建立全局变量/对象,如jQuery或注册jQuery插件.

我假设cluetip.js插件尝试注册jQuery但是它找不到它,因为它还没有被加载,这进一步说明了订单的重要性.

一如既往,最好的参考是实际规格.

一种描述这种情况的方法是通过一个简短的例子.图像我们有一个包含这些脚本的页面:

OurPage.html

<head>
   <script type="text/javascript" src="script1.js"></script>
   <script type="text/javascript" src="script2.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

和脚本:

script1.js

 alert(msg); //msg is undefined
Run Code Online (Sandbox Code Playgroud)

script2.js

var msg = "hello world";
Run Code Online (Sandbox Code Playgroud)

浏览器首先加载script1.js哪些尝试提醒msg变量,但是msg包含的变量script2.js尚未加载,因此浏览器会通知我们msg未定义.这是您的示例中发生的事情,只是在更大的层面上.