全面解析Javascript 中的执行上下文
2023-10-03 21:56:34
window),在全局执行上下文中定义的变量能够在全局范围内访问。 函数执行上下文:执行一个函数的时候就会产生一个新的函数执行上下文。该上下文中,包含由实参传递进来的参数、函数内部定义的变量、还有指向外层执行上下文的引用。 函数执行上下文有自己独立的变量环境和作用域,它可以访问外层执行上下文中的变量,但外层执行上下文无法访问其内部的变量。 上下文状态 堆栈:为了实现函数的嵌套调用,就需要使用栈结构的堆栈来保存每次函数调用时所处的执行上下文环境。 活动对象:执行上下文和活动对象(又称执行环境)是密不可分的,可以看做是一体的。 活动对象是能执行代码的对象,它有自己的属性和方法。在执行的时候,JavaScript 引擎会将执行上下文关联到相应的活动对象。JavaScript 中共有两种类型的活动对象,分别是全局对象和函数对象。 作用域链:作用域链是当我们访问一个变量时,JavaScript 引擎搜索变量时所遵循的路径。在作用域链中,全局作用域始终是它的一部分,且处于最外层,沿着链向下依次为嵌套的函数作用域。 总结 上下文状态主要由堆栈和活动对象组成,堆栈用来保存函数的调用顺序,活动对象用来保存变量和方法。每次调用一个函数,都会为其创建一个新的执行上下文,从而压入一个新的活动对象。作用域链则是用来确定变量的访问范围。执行上下文、活动对象和作用域链三者紧密相连,共同实现了 JavaScript 的代码执行过程。
在 Javascript 中,执行上下文是代码执行时所在的环境,它决定了变量的访问范围和函数的调用方式。执行上下文主要包括以下几个组成部分:
1. 全局执行上下文
一个程序中只能有一个全局上下文。在全局上下文中会创建一个全局变量(在浏览器环境中就是 window),在全局执行上下文中定义的变量能够在全局范围内访问。
2. 函数执行上下文
执行一个函数的时候就会产生一个新的函数执行上下文。该上下文中,包含由实参传递进来的参数、函数内部定义的变量、还有指向外层执行上下文的引用。函数执行上下文有自己独立的变量环境和作用域,它可以访问外层执行上下文中的变量,但外层执行上下文无法访问其内部的变量。
3. 堆栈
为了实现函数的嵌套调用,就需要使用栈结构的堆栈来保存每次函数调用时所处的执行上下文环境。
4. 活动对象
执行上下文和活动对象(又称执行环境)是密不可分的,可以看做是一体的。活动对象是能执行代码的对象,它有自己的属性和方法。在执行的时候,JavaScript 引擎会将执行上下文关联到相应的活动对象。JavaScript 中共有两种类型的活动对象,分别是全局对象和函数对象。
5. 作用域链
作用域链是当我们访问一个变量时,JavaScript 引擎搜索变量时所遵循的路径。在作用域链中,全局作用域始终是它的一部分,且处于最外层,沿着链向下依次为嵌套的函数作用域。
通过了解执行上下文,我们可以更深入地理解 Javascript 代码的执行过程。