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)論
主站蜘蛛池模板: 欧美一级高清片欧美国产欧美 | 99精品欧美一区 | 九九免费精品视频在这里 | 国产无套乱子伦精彩是白视频 | 色婷婷狠狠五月综合天色拍 | 色天使久久综合网天天 | 日本一级毛片片免费观看 | 亚洲精品成人一区二区 | 精品国产一区二区三区香蕉沈先生 | 成年人一级黄色片 | 欧美在线视频一区二区 | 久久免费在线视频 | 久久夜靖品 | 伊人黄网 | 狠狠色丁香婷婷综合欧美 | 日本亚洲欧洲高清有码在线播放 | 久久夜色精品 | 成人9久久国产精品品 | 怡红院免费va男人的天堂 | 国产精品欧美韩国日本久久 | 男女免费视频 | 久久国产精品国产自线拍免费 | 日本久色| 真人女人一级毛片免费视频观看 | 免费精品视频 | 一本色道久久综合一区 | free性欧美极度另类超级大 | 久久99热66这里只有精品一 | 91尤物在线播放 | 老子影院午夜久久亚洲 | 欧美色视频日本片免费高清 | 亚洲精品国产一区二区三 | 国产69精品久久久久999小说 | 亚洲天天做日日摸天天做 | 九九热在线视频观看 | 欧美久久网 | 免费骚视频 | 欧美国产中文字幕 | 伊人久久青草青青综合 | 久久精品免费在线观看 | 夜夜操影院 |