欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript運(yùn)行過程中的“預(yù)編譯階段”和“執(zhí)行階段”

 更新時(shí)間:2015年12月16日 15:11:24   投稿:mrr  
這篇文章主要介紹了JavaScript運(yùn)行過程中的“預(yù)編譯階段”和“執(zhí)行階段”的相關(guān)資料,需要的朋友可以參考下

 javascript相對(duì)于其它語(yǔ)言來說是一種弱類型的語(yǔ)言,在其它如java語(yǔ)言中,程序的執(zhí)行需要有編譯的階段,而在javascript中也有類似的“預(yù)編譯階段”(javascript的預(yù)編譯是以代碼塊為范圍<script></script>,即每遇到一個(gè)代碼塊都會(huì)進(jìn)行  預(yù)編譯>執(zhí)行),了解javascript引擎的執(zhí)行機(jī)理,將有助于在寫js代碼過程中的思路總結(jié)

首先科普下javascript中的兩種聲明方式,var和function,前者聲明的是變量,后者聲明的是方法

在預(yù)編譯中,javascript對(duì)這兩種聲明做出了兩種處理方案

<script>
  var a = "1";    //聲明變量a
 function b(){    //聲明方法b
    alert();
  }
  var c = function(){ //聲明變量c
    alert();
  }
</script> 

以上代碼塊中,a、c為變量賦值,b為函數(shù)聲明,當(dāng)執(zhí)行以上的代碼時(shí),首先會(huì)進(jìn)入預(yù)編譯階段,對(duì)與變量賦值a、c會(huì)在內(nèi)存中開辟一塊內(nèi)存空間并指向變量名,且賦值為undefined

對(duì)于函數(shù)聲明,則同樣會(huì)進(jìn)行開辟內(nèi)存空間,但賦值的對(duì)象會(huì)將聲明的函數(shù)賦值給函數(shù)名

預(yù)編譯階段:(PS:不管代碼中聲明變量和聲明函數(shù)的順序如何,在預(yù)編譯階段會(huì)先聲明變量,再聲明函數(shù))

<script>
    var a = undefined;
    var c = undefined;         var b = function(){
      alert();
    } </script> 

 執(zhí)行階段:

<script>
    a = "1";
    c = function(){
      alert();
    }
</script> 

整體執(zhí)行步驟:

<script>
    var a = undefined;
    var c = undefined;
    
    var b = function(){
      alert();
    }
    a = "1";
    c = function(){
      alert();
    }
</script> 

題目:

<script>
    var a = "1";
    function b(){
      alert(a);
      var a = "2";
    }
    b();
</script> 

ps:javascript的預(yù)編譯

     一、先預(yù)定義變量,再預(yù)定義函數(shù)

  二、變量的預(yù)編譯只作聲明,不作初始化,初始化在執(zhí)行時(shí)

   三、function語(yǔ)句定義的函數(shù),不僅聲明了函數(shù)名,而且函數(shù)體也進(jìn)行了處理

  四、匿名函數(shù)不會(huì)預(yù)編譯

function f(){      // 聲明函數(shù)f  
return 1; } alert(f());       // 返回1 
var f = function(){    // 定義匿名函數(shù)f  
return 2; } alert(f());       // 返回2 

先預(yù)定義了變量f,然后同名函數(shù)f()覆蓋了變量f,所以第一次輸出1;變量的預(yù)編譯

var f = function(){    // 定義匿名函數(shù)f  
return 1; } 
alert(f());       // 返回1 
function f(){      // 聲明函數(shù)f  
return 2; } 
alert(f());      // 返回1 

先預(yù)定義了變量f,然后同名函數(shù)f()覆蓋了變量f.

相關(guān)文章

最新評(píng)論