你能证实/解释一下吗?
如果jQuery在js文件之后包含,则js文件中的任何jQuery都不会执行,因为jQuery尚未包含:
<script src="js_test.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
然后,如果我的javascript文件看起来像这样:
alert('javascript is working');
(function(){
alert('ordinary javascript in self-invoked function');
})();
$(function() {
alert('this is jQuery');
});
…将执行两个javascript警报(不是jQuery警报)。
但是如果我把jQuery放在上面,像这样:
$(function() {
alert('this is jQuery');
});
alert('javascript is working');
(function(){
alert('ordinary javascript in self-invoked function');
})();
. .那么剩下的javascript是而不是执行。
所以规则似乎是,如果不正确地包含jQuery, javascript文件将被读取到任何jQuery出现的点,然后它停止读取脚本。这是真的吗?
我认为它无论如何都能够读取脚本并执行严格基于javascript的代码。
如果jQuery错误或未包含,这段代码将产生一个错误:
$(function() {
alert('this is jQuery');
});
这是因为$
还没有定义。如果发生错误,JavaScript执行就会停止,因此该行之后的所有内容都不会执行。
事件处理程序仍将被执行,因此应用程序不会完全不可用。
解析Javascript文件时,解释器将在任何解析错误时停止,整个脚本将被跳过,并且不会执行任何脚本,因为脚本无法被解析(这不是为您发生的事情,但我将其包括在内)。
但是,对于运行时错误(这就是您正在经历的),脚本将正确解析并因此被加载,但只会执行直到第一个运行时异常,然后该异常之后的脚本的其余部分将不会执行。
所以,在你的情况下,你的脚本将执行,直到它得到的东西需要jQuery(这是$(...)
函数调用在你的脚本,因为jQuery还没有加载,它会抛出一个异常(试图调用一个不存在的函数)。
这里的解决方案似乎很简单。只要把需要jQuery的脚本放在jQuery已经加载之后。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="js_test.js" type="text/javascript"></script>
这将是因为$
将在调用时未定义,阻止您的代码的其余部分继续。右键单击页面,单击"检查元素"并单击"控制台"选项卡。你可能会看到它?!