将外部javascript导入html

时间:2013-06-01 09:39:56

标签: javascript html

浏览器在导入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>



这不起作用:

<script src="/pollweb1/jquery.cluetip.js " type="text/javascript"></script>
<script src="/pollweb1/jquery.js" type="text/javascript"></script>


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

1 个答案:

答案 0 :(得分:5)

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

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

我认为cluetip.js插件尝试向jQuery注册,但由于尚未加载,因此无法找到它,这进一步说明了订单的重要性。

一如既往,最好的参考是actual specification

通过一个简短的例子来说明这一点。图像我们有一个包含这些脚本的页面:

<强> OurPage.html

<head>
   <script type="text/javascript" src="script1.js"></script>
   <script type="text/javascript" src="script2.js"></script>
</head>

脚本:

<强> script1.js

 alert(msg); //msg is undefined

<强> script2.js

var msg = "hello world";

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