首頁 > web前端 > js教程 > 主體

JavaScript運行過程中的「預編譯階段」與「執行階段」_javascript技巧

WBOY
發布: 2016-05-16 15:25:26
原創
2070 人瀏覽過

 javascript相對於其它語言來說是一種弱類型的語言,在其它如java語言中,程式的執行需要有編譯的階段,而在javascript中也有類似的「預編譯階段」(javascript的預編譯是以程式碼區塊為範圍<script></script>,每遇到一個程式碼區塊都會進行  預編譯>執行),了解javascript引擎的執行機理,將有助於在寫js程式碼過程中的想法總結

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

在預編譯中,javascript對這兩種陳述做了兩種處理方案

<script>
  var a = "1";    //声明变量a
 function b(){    //声明方法b
    alert();
  }
  var c = function(){ //声明变量c
    alert();
  }
</script> 
登入後複製

以上程式碼區塊中,a、c為變數賦值,b為函數聲明,當執行以上的程式碼時,首先會進入預編譯階段,對與變數賦值a、c會在記憶體中開闢一塊記憶體空間並指向變數名,且賦值為undefined

對於函數聲明,則同樣會進行開闢記憶體空間,但賦值的物件會將聲明的函數賦值給函數名稱

預編譯階段:(PS:不管程式碼中宣告變數和宣告函數的順序為何,在預編譯階段會先宣告變數,再宣告函數)

<script>
    var a = undefined;
    var c = undefined;         var b = function(){
      alert();
    } </script> 
登入後複製

 執行階段:

<script>
    a = "1";
    c = function(){
      alert();
    }
</script> 
登入後複製

整體執行步驟:

<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的預編譯

     一、先預先定義變量,再預定義函數

  二、變數的預編譯只作聲明,不作初始化,初始化在執行時

   三、function語句定義的函數,不僅宣告了函數名,而且函數體也進行了處理

  四、匿名函數不會預先編譯

function f(){      // 声明函数f  
return 1; } alert(f());       // 返回1 
var f = function(){    // 定义匿名函数f  
return 2; } alert(f());       // 返回2 
登入後複製

先預先定義了變數f,然後同名函數f()覆寫了變數f,所以第一次輸出1;變數的預編譯

var f = function(){    // 定义匿名函数f  
return 1; } 
alert(f());       // 返回1 
function f(){      // 声明函数f  
return 2; } 
alert(f());      // 返回1 
登入後複製

先預先定義了變數f,然後同名函數f()覆蓋了變數f.

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板