当放置在jQuery代码下时,不正确包含的jQuery会阻止普通javascript执行

Improperly included jQuery stops ordinary javascript from executing when placed beneath jquery code

本文关键字:jQuery javascript 包含 执行 不正确 代码      更新时间:2023-09-26

你能证实/解释一下吗?

如果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>

这将是因为$将在调用时未定义,阻止您的代码的其余部分继续。右键单击页面,单击"检查元素"并单击"控制台"选项卡。你可能会看到它?!