js的執行過程

JavaScript是解釋型語言,也就是說,我們的js代碼會通過一個解釋器來進行解釋執行,這個解釋器我們稱為js引擎,因為我們的瀏覽器也能執行js,所以瀏覽器里面也有js引擎,不同的瀏覽器有不同的js引擎,比如chrome的V8,safari的webkit,IE瀏覽器的Trident等。

js引擎的執行需要走三個步驟,第一是進行語法分析,這個比較簡單,就是看你的代碼格式是不是正確的,比如,如果你少了個大括號,就會被報錯。

第二步是進行預編譯,預編譯會把代碼當中使用的變量,定義的函數解析出來,確定出環境中的變量和函數等信息,也就是這個過程會導致js變量提升的問題,比如:

var a = 1; // 變量聲明
function b(y) { // 函數聲明
  var x = 1;
  console.log('so easy');
};
var c = function() { // 是變量聲明而不是函數聲明!!
  // ...
}
b(100);

當js引擎進行預編譯的時候,首選會生成一個GO(Global Object,這里是window):

GO/window = {
  //頁面加載創建GO同時,創建了document、navigator、screen等等屬性
  a: undefined,
  c: undefined,
  b: function(y){
    var x = 1;
    console.log('so easy');
  }
}

第三步就是解釋并執行代碼,直到遇到b(100),代碼執行后活動對象變成了:

GO/window = {
  //頁面加載創建GO同時,創建了document、navigator、screen等等屬性
  a: 1,
  c: function() {
    // ...
  },
  b: function(y){
    var x = 1;
    console.log('so easy');
  }
}

當執行b(100)的時候,js引擎會針對b函數進行預編譯,創建AO(Active Object)對象:

AO = {
  //創建AO同時,創建了arguments等等屬性,此處省略
  y: 100,
  x: undefined
}

然后執行b(100)

之后會一直重復進行預編譯=>代碼執行的過程。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在網絡的直言片語中禹禹前行,在書本的記錄中逐步加深,然而只有在實踐中才能提出疑問,才能映像深刻。 我所理解的js執...
    匿名1閱讀 2,622評論 11 7
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,820評論 25 708
  • 「世界之最」好彩鉆石特供煙 2016-03-16張濤拉罕張濤拉罕習文塾 好彩香煙是美國在二戰期間美軍的特供香煙,大...
    張濤拉罕閱讀 5,159評論 1 9
  • 三月,我愛上了一顆星星 看到它那一刻 便覺得春風十里,都只為向我吹過 但它光亮微弱 好像風一來就會漸漸熄滅 但我還...
    喬鹿閱讀 450評論 0 6
  • 逆商,是美國職業培訓師保羅·斯托茨提出的概念,是人們面對逆境時的反應方式,即面對挫折、擺脫困境和超越困難的能力。 ...
    拉小姐閱讀 381評論 10 2