【Day04】执行环境与执行堆叠

执行环境(Execution context)

函式执行环境

昨天有提到函式的作用域是限制在 function 内,

所以当我们宣告一个变数在 function 内时,

那该变数的作用域会限制在 function 中,

当我们执行函式时,会产生一个执行环境,

如果没有执行函式时,就不会产生执行环境,

当我们不断调用函式,就会不断产生新的执行环境,

而这个执行环境会限制该函式的作用域,以及有自己的 this

全域执行环境

全域也有自己的全域执行环境,

当网页或後端的 Node.js 只要一开启,

就会建立好全域执行环境,

在建立全域执行环境时会自动生成 windowglobal

如果使用浏览器的话会产生 window,Node.js 则会产生 global

而全域执行环境也会产生 this

执行环境重点整理:

  • 函式执行环境

    • 限制作用域
    • 有自己的 this
  • 全域执行环境

    • 产生 windowglobal
    • this,此时 this 会等於 windowglobal

执行堆叠(Execution stack)

在 JavaScript 中,执行环境一层一层向上堆叠而成,

而最底层一定是全域执行环境,

而这些堆叠的执行环境,称为执行堆叠

这样讲也许听不懂,直接看范例比较清楚

范例:

function sayHi() {
    return 'Hi weiwei'
}

function doSomething() {
    console.log(sayHi());
}

doSomething();

执行堆叠的部分可以使用 Chrome 浏览器的开发人员工具来查看

执行上述步骤後,程序码会先停留在 doSomething() 的位置,

doSomething() 还没被执行,

而在执行推叠的部分看到函式执行之前就已经存在全域执行环境 (anonymous)

进下一步之後,

在全域执行环境中呼叫 doSomething() 的函式时,

可以看到 doSomething 执行环境叠在全域执行环境上面,

而现在的执行环境是 doSomething

再下一步之後,

doSomething() 函式中呼叫 sayHi() 这个函式,

sayHi 的执行环境叠在 doSomething 的上面,

而当前的执行环境为 sayHi

sayHi 执行完毕後,会直接离开 sayHi 执行环境,

doSomething 执行完後,也会离开 doSomething 的执行环境,

最後就会回到全域执行环境 (anonymous)

上述步骤以图形表示的话

以上就是今天的内容,明天说明范围链的部分。


<<:  Genero Package 套件安装与更新方法

>>:  Day 4:认识HTML+HTML架构

[Day 29] Final Project (5/5) — 部署 App 到 Google App Engine

前情提要 昨天我们成功将模型部署到 Google AI Platform 上,并且也处理了授权的问题...

细节的重要性

上一篇我实作了第一个爬虫,之後我又有练习了类似的方式爬其他的网站,结果出现了一些小问题。当时我程序码...

Day27. Stimulus 与非同步处理 - Ajax 的更优雅写法

我们在 Day21 提到 data-remote=true、Day25 提到了一些与Ajax 相关的...

面向服务的架构 (SOA)、Web 服务和微服务

-面向服务的架构 (SOA) 面向服务的架构 (SOA) 可以通过 Web 服务或微服务来实现。W...

[实作教学]使用Line Notify收到Dcard最新文章通知

透过官方帐号进行推播会因为人数越来越多而增加发送成本,因此 Line Notify是一个官方提供帐号...