[Day4] 执行环境与执行堆叠

在昨天内容中可以知道,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 核心篇

图片待补


<<:  Day 19. Hashicorp Vault: Audit log (2)

>>:  赌盘的策略思考 - 菲阿里四价策略

Day 1 转职之路

这不是第一次 我是阿姜,今年三月开始在五倍红宝石 Astro Camp 学习程序相关技能,期间接触了...

【从零开始的Swift开发心路历程-Day22】天气预报App实作Part1

昨天我们完成简易订单系统後,今天要来练习一个新的挑战-串接API! 这次我们透过中央气象局开放资料平...

学pchome截图-用html2canvas转成canvas,再下载

用html2canvas转成canvas,再下载 载入js,js会把div里的东西,转换成canva...

10. 人人皆可为师

前言 这篇演讲提到了一些互相学习的想法,当你遇到团队在学习上面的成效不彰的时候,或许可以考虑听这演...

【PHP Telegram Bot】Day30 - 社群按赞机器人(2):将按钮设成单选并且计数

阵列的特性 还记得阵列怎麽赋值吗,Day15 - 基础(4):阵列处理、JSON 我们先来复习一下...