iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
自我挑戰組

重新開始 JavaScript系列 第 4

[Day4] 執行環境與執行堆疊

  • 分享至 

  • xImage
  •  

在昨天內容中可以知道,JavaScript 採用了靜態作用域,函式在定義時就已經確定作用域,而在產生作用域後,會產生 執行環境,並依照 執行堆疊 的方式依序執行程式碼,那什麼是 執行環境執行堆疊 呢?說明如下:

執行環境(Execution Context)

執行環境 是指程式在執行時所產生的環境

全域的執行環境

  • 當我們一開啟瀏覽器或後端 Node.js 後,就會建立全域的執行環境
  • 在全域的執行環境中,會產生全域變數( windowglobal ) - 開啟瀏覽器會產生 window 變數,而開啟後端 Node.js 則會產生 global 變數
  • 同時會產生 this,此時的 this 指向 windowglobal,要注意的是 this 的值會隨著 執行環境而改變

函式的執行環境

在函式運行時會產生函式的執行環境,以及產生函式內的變數,反之,若還沒呼叫函式是不會有函式的執行環境,也不會產生函式內的變數

執行堆疊(Execution stact)

執行環境 是一層一層建立並堆疊執行,最上層是正在執行的環境,當運作完成後則會一層一層離開,這就是所謂的 執行堆疊,而 執行堆疊 與什麼時候定義函式沒有關係,它與呼叫的位置有關。

執行環境與執行堆疊的運作範例

範例1

在還未呼叫 函式 fn2 前,沒有函式 fn1函式 fn2 的執行環境。

function fn1(people) {
    var sayHello = '早安'; 
    return `${people} ${sayHello}!`;
}

function fn2() {
    var people = '媽媽';
    console.log('1:', fn1(people));
    // 1:  媽媽 早安!
}

fn2();

範例2

利用 for 迴圈重複呼叫函式,會不斷產生新的執行環境

function fn1(num) {
    console.log(`第 ${num} 名!`);
}

function fn2() {
    fn1(1);
    // 第 1 名!
    
    for(var i=2; i<4; i++) {
        fn1(i);
    }
    // 第 2 名!
    // 第 3 名!
}

fn2();

參考文獻

六角學院 - JavaScript 核心篇

圖片待補


上一篇
[Day3] 作用域
下一篇
[Day5] 範圍鍊
系列文
重新開始 JavaScript32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言