2345testjs67ale" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

javascript執(zhí)行順序

系統(tǒng) 3217 0

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

記得面試官問(wèn)我在一個(gè)頁(yè)面中js的執(zhí)行順序問(wèn)題,結(jié)果由于自己并沒(méi)有研究過(guò),所以不太清楚,糊里糊涂的結(jié)果把自己都說(shuō)亂了。在網(wǎng)上查了一堆文章之后還是覺(jué)得應(yīng)該由自己敲出來(lái)測(cè)試一下。下面貼一下測(cè)試代碼和結(jié)果。

      
         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>標(biāo)簽中第一個(gè)內(nèi)置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>標(biāo)簽中第二個(gè)內(nèi)置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函數(shù)中的js代碼段。"
      
        );

      
      
        28
      
      
                    }

      
      
        29
      
           </script>

      
        30
      
      
        31
      
           <script>

      
        32
      
               alert("body 中的第二個(gè) 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的內(nèi)容:

      
        1
      
      
        //
      
      
         JavaScript Document
      
      
        2
      
       alert("<head>標(biāo)簽中鏈接過(guò)來(lái)的a1.js中的代碼。");
    

下面是a2.js的內(nèi)容:

      
        //
      
      
         JavaScript Document
      
      
alert("<head>標(biāo)簽中鏈接過(guò)來(lái)的a2.js中的代碼。");
    

測(cè)試結(jié)果(alert的順序)是:js的執(zhí)行順序基本上按照在html中出現(xiàn)的順序,但是也有一些細(xì)小的變化。

1.首先執(zhí)行<head>標(biāo)簽中的js,不論是內(nèi)置還是外鏈形式,都是按照出現(xiàn)的順序執(zhí)行。

2.接著執(zhí)行body中的腳本,按順序直到<html>標(biāo)簽外。

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

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

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

JavaScript執(zhí)行引擎并非一行一行地分析和執(zhí)行程序,而是 一段一段 的分析執(zhí)行的。而且在分析執(zhí)行同一段代碼中, 定義式 的函數(shù)語(yǔ)句會(huì)被提取出來(lái)優(yōu)先執(zhí)行。函數(shù)定義執(zhí)行完后,才會(huì)按順序執(zhí)行其他代碼。

先看看兩個(gè)例子:

例子1:

      <script>


      
        var
      
       hello = 
      
        function
      
      
        (){

alert(
      
      'hello,zhangsan'
      
        );

}

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

alert(
      
      'hello,lisi'
      
        );

}

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

<script>
    

例子2:

      
         1
      
       <script type="text/javascript">

      
         2
      
      
        function
      
      
         hello(){

      
      
         3
      
      
         4
      
               alert('hello,zhangsan'
      
        );

      
      
         5
      
      
         6
      
      
            }

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

      
      
        11
      
      
        12
      
               alert('hello,lisi'
      
        );

      
      
        13
      
      
        14
      
      
            }

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

例子3:

      
         1
      
       <script type="text/javascript">

      
         2
      
      
        function
      
      
         hello(){

      
      
         3
      
      
         4
      
               alert('hello,zhangsan'
      
        );

      
      
         5
      
      
         6
      
      
            }

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

      
        10
      
       <script>    

      
        11
      
      
        function
      
      
         hello(){

      
      
        12
      
      
        13
      
               alert('hello,lisi'
      
        );

      
      
        14
      
      
        15
      
      
            }

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

在例子2中,兩次調(diào)用都會(huì)輸出相同的內(nèi)容“hello,lisi”。同樣是聲明兩個(gè)相同名稱的函數(shù),為什么調(diào)用的結(jié)果卻不一樣呢?

這 就是JavaScript執(zhí)行順序?qū)е碌摹avaScript執(zhí)行引擎并非一行一行地分析和執(zhí)行程序,而是一段一段地分析執(zhí)行的。而且在分析執(zhí)行同一段 代碼中,定義式的函數(shù)語(yǔ)句會(huì)被提取出來(lái)優(yōu)先執(zhí)行。函數(shù)定義執(zhí)行完后,才會(huì)按順序執(zhí)行其他代碼。也就是說(shuō),在第一次調(diào)用hello函數(shù)之前,第一個(gè)函數(shù)語(yǔ)句 定義的代碼已經(jīng)被第二個(gè)函數(shù)定義語(yǔ)句的代碼覆蓋了,這就是為什么在例子2中第一次調(diào)用hallo時(shí),也會(huì)輸出后面定義的函數(shù)內(nèi)容的原因了。

而在例子3中,兩次調(diào)用分別在兩個(gè)不同的代碼段內(nèi),所以互不影響。

javascript執(zhí)行順序


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产精品主播在线 | 黄色网在线 | 在线免费毛片 | 国产美女mm131爽爽爽免费 | 久久久免费视频观看 | 淫视频网站| 狠狠综合久久久久综 | 日韩视频观看 | 久久免费国产精品一区二区 | 操美女的视频网站 | 免费久久精品国产片香蕉 | 在线99| 国内精品伊人久久久久7777人 | 日产精品一二三四区国产 | 国产精品探花一区在线观看 | 一区二区色 | 欧美在线播放一区二区 | 国产做受视频激情播放 | 日本爽 | 国产一区二区三区日韩欧美 | 精品99牛牛视频 | 日韩一区二区三区在线免费观看 | 青青青青久久精品国产h | 又黄又爽又成人免费视频 | 成年人免费毛片 | 91精品国产色综合久久不卡蜜 | 亚洲国产精品综合一区在线 | 香蕉视频网站在线观看 | 91精品欧美产品免费观看 | 草久免费视频 | 久99久精品免费视频热77 | 91亚洲国产成人久久精品网址 | 国产精品免费观看网站 | 成人午夜精品网站在线观看 | 最新香蕉97超级碰碰碰碰碰久 | 国产目拍亚洲精品区一区 | 国产成人精品aaaa视频一区 | 久久免费精品视频在线观看 | 久久精品亚洲99一区二区 | www日韩中文字幕在线看 | 久久久噜噜噜久久网 |