1

浏览器在为 html 页面导入外部 javascript 时首先会做什么?它会尝试编译它吗?
我问这个问题是因为当我尝试先导入线索提示 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 文件后立即尝试编译它?

4

1 回答 1

6

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

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

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

与往常一样,最好的参考是实际规范

描述这一点的一种方法是通过一个简短的示例。图片我们有一个包含这些脚本的页面:

我们的页面.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未定义的浏览器通知。这就是您的示例中正在发生的事情,只是在更大的层面上。

于 2013-06-01T09:41:58.323 回答