返回

js执行机制1:执行上下文

前端




### 什么是执行上下文? 执行上下文是js引擎解释执行js代码的环境上下文,在js执行过程中,js引擎会创建一个全局执行上下文,然后将js代码编译成机器指令。浏览器执行时,会为每次函数调用创建一个独立的执行上下文。 全局执行上下文(页面生命周期内只有一份)是js代码运行的第一个执行上下文,它包含两个主要组成部分:变量对象和作用域链。变量对象存储着所有在全局作用域中声明的变量,而作用域链则存储着所有从全局作用域到当前执行上下文之间的所有变量对象。 当一个函数被调用时,js引擎会为该函数创建一个新的执行上下文。这个新的执行上下文包含一个变量对象和一个作用域链。变量对象存储着所有在该函数中声明的变量,而作用域链则存储着所有从该函数到全局执行上下文之间的所有变量对象。 全局执行上下文的作用: - 创建一个变量对象,用于存储所有在全局作用域中声明的变量。 - 创建一个作用域链,用于查找变量。 - 执行所有在全局作用域中的代码。 调用栈: 当js代码被执行时,js引擎会创建一个调用栈(执行上下文栈)。调用栈是一个后进先出的数据结构,这意味着最新的执行上下文总是位于栈顶。当一个函数被调用时,js引擎会将该函数的执行上下文压入调用栈中。当函数执行完毕后,js引擎会将该函数的执行上下文从调用栈中弹出。 局部执行上下文: 当一个函数被调用时,js引擎会为该函数创建一个新的执行上下文。这个新的执行上下文包含一个变量对象和一个作用域链。变量对象存储着所有在该函数中声明的变量,而作用域链则存储着所有从该函数到全局执行上下文之间的所有变量对象。 活动执行上下文: 在任何给定时刻,只有一个执行上下文是活动的。这个活动的执行上下文是调用栈中最上面的执行上下文。活动的执行上下文是当前正在执行的代码的环境上下文。 执行上下文是js执行机制的关键组成部分。了解执行上下文可以帮助你更好地理解js代码是如何执行的,以及如何解决js中的错误。 ### 理解执行上下文 要想理解执行上下文,首先需要了解js的执行环境。js的执行环境包括两个主要部分: - 全局执行环境:这是js代码运行的第一个环境,它包含两个主要组成部分:变量对象和作用域链。变量对象存储着所有在全局作用域中声明的变量,而作用域链则存储着所有从全局作用域到当前执行上下文之间的所有变量对象。 - 局部执行环境:当一个函数被调用时,js引擎会为该函数创建一个新的执行环境。这个新的执行环境包含一个变量对象和一个作用域链。变量对象存储着所有在该函数中声明的变量,而作用域链则存储着所有从该函数到全局执行环境之间的所有变量对象。 执行上下文是js代码运行的环境,它包含两个主要组成部分: - 变量对象:变量对象存储着所有在该执行环境中声明的变量。 - 作用域链:作用域链存储着所有从该执行环境到全局执行环境之间的所有变量对象。 ### 执行上下文的使用 执行上下文在js代码执行过程中起着重要的作用。它可以用来: - 存储变量:执行上下文中的变量对象存储着所有在该执行环境中声明的变量。 - 查找变量:执行上下文中的作用域链可以用来查找变量。当js引擎需要查找一个变量时,它会从当前执行上下文的变量对象开始查找。如果没有找到,它会沿着作用域链向上查找,直到找到该变量。 - 执行代码:执行上下文是js代码执行的环境。当js引擎执行代码时,它会使用当前执行上下文的变量对象和作用域链来解释执行代码。 执行上下文是js执行机制的关键组成部分。了解执行上下文可以帮助你更好地理解js代码是如何执行的,以及如何解决js中的错误。