• 小经验: 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>

     

  • 相关阅读:
    SpringBoot HATEOAS用法简介
    犀函
    dubbo 相关面试题 有用(转)
    想使用消息队列,先考虑下这些问题!
    appium在Mac上环境搭建
    3. SOFAJRaft源码分析— 是如何进行选举的?
    Redis相关知识
    替代微信ipad协议(转)
    c#面试题(1)(转)
    例题6-5 Boxes in a line uVa12657
  • 原文地址:https://www.cnblogs.com/zjfazc/p/2643611.html
Copyright © 2020-2023  润新知