不正确地包含jQuery会阻止普通javascript在jquery代码

时间:2015-10-25 18:20:22

标签: javascript jquery

你能确认/解释一下吗?

如果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的代码。

3 个答案:

答案 0 :(得分:2)

如果错误地或不包含jQuery,这段代码会产生错误:

$(function() {
   alert('this is jQuery');
});

那是因为$尚未定义(尚未)。如果出现错误,JavaScript执行只会停止,因此该行之后的所有内容都不会被执行。

事件处理程序仍将执行,因此应用程序不会完全无法使用。

答案 1 :(得分:1)

在解析Javascript文件时,解释器将停止任何解析错误,并且将跳过整个脚本,并且不会执行任何操作,因为无法解析脚本(这不是您发生的事情,但我' m包括完整性)。

但是,对于运行时错误(这是您正在经历的错误),脚本将正确解析并因此加载,但只会执行直到第一个运行时异常,然后该异常后的其余脚本将不会执行。

因此,在您的情况下,您的脚本将执行,直到它到达需要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>

答案 2 :(得分:0)

这是因为调用时$未定义,导致代码的其余部分无法继续。右键单击页面,单击“检查元素”。并点击“控制台”&#39;标签。你有疑问吗?!