Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将外部javascript导入html_Javascript_Html - Fatal编程技术网

将外部javascript导入html

将外部javascript导入html,javascript,html,Javascript,Html,浏览器在为html页面导入外部javascript时首先做什么?它是否尝试编译它? 我问这个问题是因为我在尝试先导入一个cluetipjqueryjs文件,然后导入jquery.js文件时遇到了一个异常。 这起到了作用: 这不起作用: 我可以看出,要使jquery.cluetip.js正常工作,它需要jquery.js文件。但为什么顺序很重要?浏览器是否会在导入javascript文件后立即尝试编译它?顺序很重要,因为cluetip.js文件依赖于jquery.js,浏览器会按照遇到它们的顺

浏览器在为html页面导入外部javascript时首先做什么?它是否尝试编译它? 我问这个问题是因为我在尝试先导入一个cluetipjqueryjs文件,然后导入jquery.js文件时遇到了一个异常。 这起到了作用:

这不起作用:


我可以看出,要使jquery.cluetip.js正常工作,它需要jquery.js文件。但为什么顺序很重要?浏览器是否会在导入javascript文件后立即尝试编译它?

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

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

我假设cluetip.js插件试图向jQuery注册,但是由于它还没有加载,所以找不到它,这进一步说明了顺序的重要性

与以往一样,这方面的最佳参考是

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

OurPage.html

脚本2.js


浏览器首先加载script1.js,它试图警告msg变量,但是msg变量包含在尚未加载的script2.js中,因此浏览器通知我们msg未定义。这就是您的示例中发生的情况,只是在更大的层次上。

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

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

我假设cluetip.js插件试图向jQuery注册,但是由于它还没有加载,所以找不到它,这进一步说明了顺序的重要性

与以往一样,这方面的最佳参考是

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

OurPage.html

脚本2.js


浏览器首先加载script1.js,它试图警告msg变量,但是msg变量包含在尚未加载的script2.js中,因此浏览器通知我们msg未定义。这就是您的示例中发生的情况,只是在更大的层次上。

所有第一个脚本都将在浏览器访问第二个脚本之前被解析和执行。如果它只包含函数定义,则函数实际上不会被调用,尽管它们将被解析,这将拾取语法错误,但不会拾取运行时错误。但是你必须在某个地方调用这个函数,对吗?假设您没有将自己的代码添加到jquery.js中。cluetip.js是否包含文档就绪处理程序?或者您也在html页面本身添加JS代码?@nnnnnn:no,cluetip不包括文档处理程序。在导入两个外部js文件后,我在html页面中包含的文档处理程序本身在浏览器访问第二个脚本之前,第一个脚本的所有内容都将被解析并执行。如果它只包含函数定义,则函数实际上不会被调用,尽管它们将被解析,这会发现语法错误,但不会被调用运行时错误。但是你必须在某个地方调用这个函数,对吗?假设您没有将自己的代码添加到jquery.js中。cluetip.js是否包含文档就绪处理程序?或者您也在html页面本身添加JS代码?@nnnnnn:no,cluetip不包括文档处理程序。在导入两个外部js文件之后,我在html页面中包含的文档处理程序本身——脚本从未真正编译过——除了现代js引擎可能编译一些代码之外。有些浏览器采用分阶段的方法,首先解释所有代码,然后选择热代码
imised,编译了非常热门的代码。通常,整个脚本在执行之前都会被解析,这就是为什么脚本末尾的语法错误会阻止整个脚本运行,但运行时错误显然会在脚本运行时发生。因此,我们收到了msg未定义的警报-您可能不会收到警报,您可能会得到一个引用错误。@nnnnnn:jquery.cluetip.js只包含一个函数。只有在加载整个页面之后,即jquery.js被导入之后,才会调用该函数。因为cluettip函数是在document.ready函数中调用的。@Ashwin-是,但如果在cluetip.js中分配了document ready处理程序,则会导致错误,因为jquery.js尚未执行,$或$jquery将给出一个引用错误。正如Kevin在他的第一段中指出的那样。@nnnnnnnn感谢您分享有关Javascript编译的信息,但通常您会收到编译时错误吗?另外,我可能误用了alerted这个词,我应该说是informated,因为我引用了不同浏览器记录的错误。感谢您的输入。这些脚本从未真正编译过——除了现代JS引擎可能编译一些代码。一些浏览器采用分阶段的方法,首先解释所有代码,然后优化热代码,然后编译非常热的代码。通常,整个脚本在执行之前都会被解析,这就是为什么脚本末尾的语法错误会阻止整个脚本运行,但运行时错误显然会在脚本运行时发生。因此,我们收到了msg未定义的警报-您可能不会收到警报,您可能会得到一个引用错误。@nnnnnn:jquery.cluetip.js只包含一个函数。只有在加载整个页面之后,即jquery.js被导入之后,才会调用该函数。因为cluettip函数是在document.ready函数中调用的。@Ashwin-是,但如果在cluetip.js中分配了document ready处理程序,则会导致错误,因为jquery.js尚未执行,$或$jquery将给出一个引用错误。正如Kevin在他的第一段中指出的那样。@nnnnnnnn感谢您分享有关Javascript编译的信息,但通常您会收到编译时错误吗?另外,我可能误用了alerted这个词,我应该说是informated,因为我引用了不同浏览器记录的错误。谢谢你的意见。
<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>
<head>
   <script type="text/javascript" src="script1.js"></script>
   <script type="text/javascript" src="script2.js"></script>
</head>
 alert(msg); //msg is undefined
var msg = "hello world";