小经验: html中 js脚本运行顺序:思路整理

  之前对html中的js脚本的运行顺序一直没有认真的去理清思路,只是把几个用到的脚本文件随便放在头部,后面的文本中调用。

  但是没有了解其运行顺序,在写代码是有时候会造成混乱。

  今天抽了点时间测试了一下。

  一、当有外联js时:

         1、外联js出现在<head>标签中的时候,这时候的脚本是最早运行的,同时也是按照文档顺序自上而下运行的。

   2、外联js出现在<body>标签中的时候,这时候脚本也是按照文档顺序运行的,与内嵌<body>的js脚本一样,执行到该语句就运行。

  二、当<head>标签中有js脚本段落时,如果没有在$(function(){ }); 中的话:它会立即执行。如果是在$(function(){ }); 里面, 但它将在文档加载完毕后执行的。

  三、<body>标签的js脚本段运行的顺序是: 当执行到该语句就运行。

  四、可能的话,js脚本的具体执行语句一般放在<body>最后面中,这样可以确定js脚本是在所有页面元素加载完后才执行的。


PS: 对于一些公用函数的外联脚本,尽可能的放在<head>标签前部。 在一个js文件中,函数的调用可以不考虑它定义的顺序。但在多个js文件中,不同

  文件中的函数的相互调用就要考虑这些函数的定义顺序了,不然会出现undefined错误。

  2、可以概括的讲,在没有用 $(function(){}); 包住的js脚本将会按照document文档的顺序执行,并且对于其函数的调用没有顺序要求,只要定义了就可以调用。 而被$(function(){}); 包住的js脚本,则是在文档加载完毕后在按照document文档顺序执行,其优先级将会低于外部。

 

见例子:

<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>  // 最先加载
<script type="text/javascript" src="js/first.js"></script>
<script type="text/javascript" src="js/second.js"></script>
<script type="text/javascript">
    var app = {};  // 紧跟着外联js运行
    $(function(){    // 将会在document文件加载完毕后运行,一般卸载这个js片段的尾部
        function a1(){
        
        }
        
        b();      // 调用文档底部的b()函数成功
    });
    var dpp = {};  // 紧跟app执行
    a1();       // 调用失败,a1()函数 未定义
    b();        // 调用失败,b() 函数为定义,因为不是出在同意js代码段,b()函数在这里还没有定义。
   a2();        // 调用成功,同一个js代码段的函数无先后顺序
    function a2(){
  }
</script>

</head>
<body>

<script type="text/javascript" src="js/body.js"></script>    // 程序执行到这里将会加载外联js
<script type="text/javascript">                     
    a1();    // 将会调用失败,函数未定义
    a2();    // 能调用成功,函数已经在前面的js片段中定义了
   b();    // 成功调用本js代码片段的函数
function b(){ 

}
  
  $(function(){   // 这里面的代码将在前面的$(function(){}) 执行后在执行
     // 代码
  })
</script> </body> </html>

 

原文地址:https://www.cnblogs.com/zjfazc/p/2643611.html