關於Jquery,js腳本加載執行先后順序的一些事


    好久沒用Jquery了,最近有個東西需要寫一下,就想了想那些讓腳本延緩執行的一些方法有什么區別呢。

    (1)當然,第一種方式就是將腳本內嵌在html中相應需要執行的地方,需要等到頁面加載完成的話就放在最后。當然這已經是大家很不屑的做法,一般也就是一些測試啊什么的時候會用用或者代碼就一幾句話,其他很少會這么做了。作為外部文件引入的優點也就不贅述了,一般都明白。

    (2)將<Script>標簽從head放到〈/body〉之前,其他html內容之后。這也很好理解,主要的html加載完之后,腳本才開始運行,當然要注意,這里的加載完僅僅指的是DOM加載完,圖片之類的還不一定加載完成。

    (3)使用defer(推遲)屬性。這個屬性是表明腳本在執行時不會影響頁面構造,也就是說腳本會在整個頁面解析完成之后再運行,這其實和第二點是一樣的,除了〈Script〉標簽可以放在head里了。但是這個屬性的兼容性有待考證,舊版本的瀏覽器只有IE是支持的,相對較新的瀏覽器倒是都支持了。

    (4)使用async(異步)屬性。這個屬性是html新添加的屬性,從英文解釋就可以看出,該屬性是為了頁面之間加載不出現阻塞的情況,是並行加載相關項,所以和defer執行效果相似,但是有一個不同,可能會造成腳本的嚴重問題,就是運行的時機。defer是有順序的,按照原先語句的先后順序執行,這樣對有依賴關系的腳本沒有影響;但是async是下載完成就執行,要是不同腳本之間有依賴關系,就有可能會造成未知的嚴重錯誤(當然也是有可能正常使用的)。

     之前說的都是關於腳本加載的先后順序,至於執行的先后順序,方法就更多種多樣了。

    (5)在onload事件之后調用,注意這是在頁面所有元素加載完畢后執行的,也就是圖片,flash都要先加載完,腳本才執行;還有,onload才能執行一個,不能執行多個。

a)寫在body的onload事件里:

<html>
      <body onload="func()">
      </body>
</html>
<html>
      <body onload="func1();func2();func3();">
      </body>
</html> 

b)寫在腳本代碼里

<script type="text/javascript">
      function func(){……}
      window.onload=func;
</script>
<script type="text/javascript">
      function func1(){……}
      function func2(){……}
      function func3(){……}
      window.onload=function(){
      func1();
      func2();
      func3();
     }
 </script>

c)Jquery的寫法

$(window).load(function() {
    ...
});

d)JS自定義函數式多次調用(我倒是從來沒用過額```)

<script type="text/javascript">
      function func1(){……}
      function func2(){……}
      function func3(){……}
      function addLoadEvent(func){
         var oldonload=window.onload;
         if(typeof window.onload!="function"){
             window.onload=func;
          }
         else{
             window.onload=function(){
                  oldonload();
                  func();
               }
             }
       }
       addLoadEvent(func1);
       addLoadEvent(func2);
       addLoadEvent(func3);
</script>

     (6)Jquery使用$(document).ready(),這是在DOM加載完畢就執行,不是所有元素加載完成;相對於onload只能執行一個,ready可以有多個且都能執行:

             ps:要想使用Js直接實現,還是有點小麻煩的~~    

$(document).ready(function(){   
 ... 
});
//簡寫成如下 $(function(){ ... });  

我所理解的就這樣了,寫個隨筆記錄一下,免得又忘了~  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM