2345testjs67ale" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

javascript執行順序

系統 4028 0

今天作為前端小菜跑去某廠面試,結果以失敗告終。

記得面試官問我在一個頁面中js的執行順序問題,結果由于自己并沒有研究過,所以不太清楚,糊里糊涂的結果把自己都說亂了。在網上查了一堆文章之后還是覺得應該由自己敲出來測試一下。下面貼一下測試代碼和結果。

      
         1
      
       <!doctype html>

      
         2
      
       <html>

      
         3
      
       <head>

      
         4
      
       <meta charset="utf-8">

      
         5
      
       <title>test js</title>

      
         6
      
       <script type="text/javascript">

      
         7
      
           alert("<head>標簽中第一個內置js代碼段,位于鏈接js的前面。"
      
        );

      
      
         8
      
       </script>

      
         9
      
       <script type="text/javascript" src="a1.js"></script>

      
        10
      
       <script type="text/javascript" src="a2.js"></script>

      
        11
      
       <script type="text/javascript">

      
        12
      
           alert("<head>標簽中第二個內置js代碼段,位于鏈接js的后面。"
      
        );

      
      
        13
      
       </script>

      
        14
      
       </head>

      
        15
      
      
        16
      
       <body onload="b()">

      
        17
      
           <script defer>

      
        18
      
               alert("defer中的代碼段。"
      
        );

      
      
        19
      
           </script>

      
        20
      
      
        21
      
           <script>

      
        22
      
               alert("body 中的 js 代碼段。"
      
        );

      
      
        23
      
           </script>

      
        24
      
      
        25
      
           <script>

      
        26
      
      
        function
      
      
         b(){

      
      
        27
      
                   alert("b函數中的js代碼段。"
      
        );

      
      
        28
      
      
                    }

      
      
        29
      
           </script>

      
        30
      
      
        31
      
           <script>

      
        32
      
               alert("body 中的第二個 js 代碼段。"
      
        );

      
      
        33
      
           </script>

      
        34
      
      
        35
      
       </body>

      
        36
      
       <script>

      
        37
      
           alert("body 之外的 js 代碼段。"
      
        );

      
      
        38
      
       </script>

      
        39
      
       </html>

      
        40
      
       <script>

      
        41
      
           alert("html 之外的 js 代碼段。"
      
        );

      
      
        42
      
       </script>
    

下面是a1.js的內容:

      
        1
      
      
        //
      
      
         JavaScript Document
      
      
        2
      
       alert("<head>標簽中鏈接過來的a1.js中的代碼。");
    

下面是a2.js的內容:

      
        //
      
      
         JavaScript Document
      
      
alert("<head>標簽中鏈接過來的a2.js中的代碼。");
    

測試結果(alert的順序)是:js的執行順序基本上按照在html中出現的順序,但是也有一些細小的變化。

1.首先執行<head>標簽中的js,不論是內置還是外鏈形式,都是按照出現的順序執行。

2.接著執行body中的腳本,按順序直到<html>標簽外。

3.然后執行defer="defer"的腳本。(IE中測試支持,chrome和firefox都不支持defer屬性,在這兩個瀏覽器中,將作為正常的腳本段按順序執行)。

4.最后執行body的onload方法b()。

另外:(轉自: http://www.cnblogs.com/Jason-Damon/archive/2011/11/12/2246483.html

JavaScript執行引擎并非一行一行地分析和執行程序,而是 一段一段 的分析執行的。而且在分析執行同一段代碼中, 定義式 的函數語句會被提取出來優先執行。函數定義執行完后,才會按順序執行其他代碼。

先看看兩個例子:

例子1:

      <script>


      
        var
      
       hello = 
      
        function
      
      
        (){

alert(
      
      'hello,zhangsan'
      
        );

}

hello();
      
      
        //
      
      
        第一次調用,輸出“hello,zhangsan”
      
      
        var
      
       hello = 
      
        function
      
      
        (){

alert(
      
      'hello,lisi'
      
        );

}

hello();
      
      
        //
      
      
        第二次調用,輸出“hello,lisi”
      
      

<script>
    

例子2:

      
         1
      
       <script type="text/javascript">

      
         2
      
      
        function
      
      
         hello(){

      
      
         3
      
      
         4
      
               alert('hello,zhangsan'
      
        );

      
      
         5
      
      
         6
      
      
            }

      
      
         7
      
      
         8
      
           hello();
      
        //
      
      
        第一次調用,輸出hello,lisi
      
      
         9
      
      
        10
      
      
        function
      
      
         hello(){

      
      
        11
      
      
        12
      
               alert('hello,lisi'
      
        );

      
      
        13
      
      
        14
      
      
            }

      
      
        15
      
      
        16
      
           hello();
      
        //
      
      
        第二次調用,輸出hello,lisi
      
      
        17
      
       </script>
    

例子3:

      
         1
      
       <script type="text/javascript">

      
         2
      
      
        function
      
      
         hello(){

      
      
         3
      
      
         4
      
               alert('hello,zhangsan'
      
        );

      
      
         5
      
      
         6
      
      
            }

      
      
         7
      
      
         8
      
           hello();
      
        //
      
      
        第一次調用,輸出hello,zhangsan
      
      
         9
      
       </script>

      
        10
      
       <script>    

      
        11
      
      
        function
      
      
         hello(){

      
      
        12
      
      
        13
      
               alert('hello,lisi'
      
        );

      
      
        14
      
      
        15
      
      
            }

      
      
        16
      
      
            hello();
        
          //第二次調用,輸出hello,lisi 
        
      
      
        17
      
       </script>
    

在例子2中,兩次調用都會輸出相同的內容“hello,lisi”。同樣是聲明兩個相同名稱的函數,為什么調用的結果卻不一樣呢?

這 就是JavaScript執行順序導致的。JavaScript執行引擎并非一行一行地分析和執行程序,而是一段一段地分析執行的。而且在分析執行同一段 代碼中,定義式的函數語句會被提取出來優先執行。函數定義執行完后,才會按順序執行其他代碼。也就是說,在第一次調用hello函數之前,第一個函數語句 定義的代碼已經被第二個函數定義語句的代碼覆蓋了,這就是為什么在例子2中第一次調用hallo時,也會輸出后面定義的函數內容的原因了。

而在例子3中,兩次調用分別在兩個不同的代碼段內,所以互不影響。

javascript執行順序


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論