Skip to content

Latest commit

 

History

History
146 lines (88 loc) · 2.78 KB

1.執行環境與詞彙環境.md

File metadata and controls

146 lines (88 loc) · 2.78 KB

執行環境與詞彙環境

執行環境與詞彙環境

Lexical Environment (實際撰寫的程式碼)

當我們在討論程式碼的詞彙環境時,我們在意的其實是:

它被寫在哪裡? 它的周圍環境是什麼?

Execution Context (電腦執行中的程式碼)

全域環境與全域物件

在瀏覽器上運作的 js 程式,全域環境會是 window, this 也會指向 window

另開一個分頁,會有一個新的 window 與指向它的 this,因為一個視窗會有一個全域物件。

執行環境第一階段:創造並提昇

執行環境會分兩階段創造, 第一階段是創造(creation)階段,

第二階段是執行階段。

單執行序、同步執行

單執行序 single threaded

程式碼中有許多指令, 一次只會執行一行。

JavaScript 是單執行序, 但瀏覽器中並非只有 JavaScript 在執行, 所以其他程序並不一定是單執行序

同步執行 synchronous

程式碼一次執行一行, 並且依照順序。

函數呼叫與執行堆

函數呼叫 invocation

execution stck

stack => 後進先出

函數、環境與變數環境

變數環境

function b)(){
    var myVar;
    console.log(myVar);
}

function a(){
    var myVar = 2;
    console.log(myVar);
    b();
}

var myVar = 1;
console.log(myVar);
a();

// the result
//
// 1
// 2
// undefined

範圍鍊

scope chain

function b(){
    console.log(myVar);
}

function a(){
    var myVar = 2;
    b();
}

var myVar = 1;
a();

// the result:
// 1

scope chain 與 execution context 不一樣。

在當前 execution context 中找不到的變數,JavaScript 引擎會順著 scope chain 繼續往下找,但往下找的地方並不是看 execution stack,而是看 lexical environment.

非同步

asynchronous

https://i.imgur.com/JUdFXma.png

JavaScript Engine

JavaScript 不是瀏覽器中的唯一引擎,JavaScript Engine 運作的同時,瀏覽器中的其中機制也在運作。

Event Queue

當 execution stack 是空的時候,JavaScript 才會注意到 event queue,也就是說要等 execution stack 跑完才會執行 event queue 相對應的 handler function.

JavaScript 是同步的方式在處理非同步請求。