学习了解执行上下文对象及执行栈,更好地理解js中代码运行机制。
一、基本概念
执行上下文对象(Execution Context Object)是在 JavaScript 引擎中创建并用于描述当前正在执行的代码环境的数据结构。每当一段 JavaScript 代码被执行时,都会创建一个新的执行上下文对象。
执行上下文分为以下三类:
二、执行上下问对象的组成
- 变量环境(Variable Environment):用于存储变量和函数声明的上下文。它包括了当前作用域中声明的所有变量和函数,以及对外部作用域的引用。这个引用是单向的,这就是子作用域能访问父作用域,而父作用域不能访问子作用域的原因。
- 词法环境(Lexical Environment):描述了当前执行代码所处的词法作用域,并通过一系列嵌套的词法环境连成一个作用域链,以便查找变量和函数。
- this值:指向当前执行代码的上下文对象。
- 执行上下文对象的创建始于一段代码块的开始,并在代码块执行完成后被销毁。在 JavaScript 中,全局执行上下文对象是最先被创建的,并且只有一个。在函数被调用时也会创建一个新的执行上下文对象。
三、结合代码理解执行上下文对象
var scope = 'global'
function checkScope() {
// var scope = 'local'
var value = 1
var obj = {
value: 10,
fun: function() {
console.log(this.value)
}
}
console.log(obj.fun())
console.log('checkScope:' + scope)
console.log(this.scope)
function execute() {
console.log('excute:' + scope)
console.log(this.scope)
}
execute()
}
checkScope()
console.log('global:' + scope)
console.log(this)
四、执行栈的使用过程
视频讲解https://www.bilibili.com/video/BV1km4y127WB/?vd_source=be4efb0f2cfe5e83a1774731474196fd