javascript是由什么解析的

本篇內(nèi)容介紹了“javascript是由什么解析的”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司是專業(yè)的昂仁網(wǎng)站建設(shè)公司,昂仁接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行昂仁網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

javascript是一種解釋型的腳本語言,可以由瀏覽器動(dòng)態(tài)解析和執(zhí)行。javascript本身就是游覽器可以直接識(shí)別的,javascript的解釋器被稱為javascript引擎,是瀏覽器默認(rèn)的一部分。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

javascript是一種解釋型的腳本語言,它不同于java或者c#這種編譯語言,不需要編譯成瀏覽器可識(shí)別的語言,而是由瀏覽器動(dòng)態(tài)解析和執(zhí)行的。(本身就是瀏覽器可以直接識(shí)別,javascript的解釋器被稱為javascript引擎,是瀏覽器默認(rèn)的一部分)

下面給大家介紹一下javascript的解析過程。要理解javascript的解析過程,先了解幾個(gè)概念。

1.代碼塊

javascript中的代碼塊是指由<script>標(biāo)簽分割的代碼段。

<script type="text/javascript">
      console.log("這是代碼塊一");
  </script>

  <script type="text/javascript">
      console.log("這是代碼塊二");
  </script>

JS是按照代碼塊來進(jìn)行編譯和執(zhí)行的,代碼塊間相互獨(dú)立,但變量和方法共享。

<script type="text/javascript">
      console.log(str);        //因?yàn)闆]有定義str,所以瀏覽器會(huì)出錯(cuò),下面的不能運(yùn)行
      console.log("我是代碼塊一");   //沒有運(yùn)行到這里
      var test = "我是代碼塊一變量";
</script>

<script type="text/javascript">
      console.log("我是代碼塊二");    //這里有運(yùn)行到
      console.log(test);         //輸出undefined,因?yàn)榈谝粋€(gè)代碼塊執(zhí)行第一行代碼的時(shí)候游覽器報(bào)錯(cuò),代碼塊中第一行下面的所有代碼都沒有執(zhí)行。故test的定義了,但沒有賦值。(為什么test定義了卻沒有賦值,因?yàn)樽兞可昝鞯奶嵘?
</script>

上面的代碼中代碼塊一中運(yùn)行報(bào)錯(cuò),但不影響代碼塊二的執(zhí)行,這就是代碼塊間的獨(dú)立性,而代碼塊二中能調(diào)用到代碼一中的變量,則是塊間共享性

2.聲明式函數(shù)與賦值式函數(shù)

<script type="text/javascript">
     function Fn(){ //聲明式函數(shù)
     console.log('我是聲明式函數(shù)');
     }
     var Fn = function{  //賦值式函數(shù)
       console.log('我是賦值式函數(shù)');
     }
</script>

聲明式函數(shù)與賦值式函數(shù)的區(qū)別在于:在JS的預(yù)編譯期,聲明式函數(shù)將會(huì)先被提取出來,然后才按順序執(zhí)行js代碼。

預(yù)編譯期與執(zhí)行期:

事實(shí)上,JS的解析過程分為兩個(gè)階段:預(yù)編譯期(預(yù)處理)與執(zhí)行期。

預(yù)編譯期JS會(huì)對(duì)本代碼塊中的所有聲明的變量和函數(shù)進(jìn)行處理,但需要注意的是此時(shí)處理函數(shù)的只是聲明式函數(shù),而且變量也只是進(jìn)行了聲明但未進(jìn)行初始化以及賦值。

<script type="text/javascript">
     Fn();                 //執(zhí)行結(jié)果:"執(zhí)行了函數(shù)2",同名函數(shù)后者會(huì)覆蓋前者
     function Fn(){       //函數(shù)1
        console.log("執(zhí)行了函數(shù)1");
     }
     function Fn(){      //函數(shù)2
        console.log("執(zhí)行了函數(shù)2");
     }
</script>
<script type="text/javascript">
      Fn(); //執(zhí)行結(jié)果:"執(zhí)行了聲明式函數(shù)",在預(yù)編譯期聲明函數(shù)及被處理了,所以即使Fn()調(diào)用函數(shù)放在聲明函數(shù)前也能執(zhí)行。
      function Fn(){ //聲明式函數(shù)
      console.log("執(zhí)行了聲明式函數(shù)");
      }
      var Fn = function(){  //賦值式函數(shù)      console.log("執(zhí)行了賦值式函數(shù)");     } </script>
//代碼塊一
<script type="text/javascript">
      console.log(str);//瀏覽器報(bào)錯(cuò),但并沒有輸出信息
</script>

//代碼塊二
<script type="text/javascript">
      console.log(str);//控制臺(tái)輸出"undefined"
      var str = "aaa";
</script>

//js在預(yù)處理期對(duì)變量進(jìn)行了聲明處理,但是并沒有進(jìn)行初始化與賦值,所以導(dǎo)致代碼塊二中的變量是unfiened的,而代碼一中的變量是完全不存在的,所以瀏覽器報(bào)錯(cuò)。

我們來看看下面這個(gè)例子

<script type="text/javascript">
      Fn(); //瀏覽器報(bào)錯(cuò):"undefined"
</script>

<script type="text/javascript">
      function Fn(){ //函數(shù)1
          console.log("執(zhí)行了函數(shù)1");
      }
</script>

????

因?yàn)閖avascript的引擎是按照代碼塊來進(jìn)行預(yù)處理和執(zhí)行的,也就是說預(yù)處理的只是執(zhí)行到的代碼塊的聲明函數(shù)和變量,而對(duì)于還未加載的代碼塊,是沒法進(jìn)行預(yù)處理的,這也是邊編譯邊處理的核心所在。

總結(jié):

step 1. 讀入第一個(gè)代碼塊。

step 2. 做語法分析,有錯(cuò)則報(bào)語法錯(cuò)誤(比如括號(hào)不匹配等)并跳轉(zhuǎn)到step5,沒錯(cuò)跳轉(zhuǎn)step3。

step 3. 對(duì)var變量和function定義做“預(yù)編譯處理”(永遠(yuǎn)不會(huì)報(bào)錯(cuò)的,因?yàn)橹唤馕稣_的聲明)。

step 4. 執(zhí)行代碼段,有錯(cuò)則報(bào)錯(cuò)(比如變量未定義)。

step 5. 如果還有下一個(gè)代碼段,則讀入下一個(gè)代碼段,重復(fù)step2。

step 6. 結(jié)束。

“javascript是由什么解析的”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

分享文章:javascript是由什么解析的
文章源于:http://muchs.cn/article42/pppcec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈品牌網(wǎng)站建設(shè)、小程序開發(fā)動(dòng)態(tài)網(wǎng)站、電子商務(wù)、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站