JS中的作用域链是在什么时候建立的

发布网友 发布时间:2022-04-22 03:21

我来回答

2个回答

热心网友 时间:2022-04-22 15:04

执行上下文

每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文.
执行上下文是个抽象概念,标准中没有从技术实现上定义执行上下文的具体结构和类型.
就是一系列活动的执行上下文从逻辑上形成一个栈(比较抽象).
栈底总是全局上下文,栈顶是当前(活动的)执行上下文.
当在不同的执行上下文间切换(退出而进入新的执行上下文)的时候,栈会被修改(通过压栈或者出栈的形式).

变量对象
执行上下文的数据是以变量对象的属性形式进行存储的.

一个变量对象(简写为VO)是一个和执行上下文相关的特别对象,存储以下内容:
变量(声明的变量,var)
函数声明(简写为FD)
在上下文中,函数声明的形式参数

作用域链

作用域链是一条变量对象的链,它和执行上下文有关,用于在处理标识符的时候进行变量查询.
函数上下文的作用域链在函数调用的时候创建出来,它包含了活跃对象和该函数的内部[[Scope]]属性.

执行上下文变量大致如下:
activeExecutionContext = {
VO:{...},//或者AO
this:thisValue,
Scope:[
//作用域链,所有变量对象的列表,用来查询标识符
]
}

上面Scope可以定义如下:
Scope = AO+[[Scope]]
可以用数组进行表示:
var Scope = [VO1,VO2,...,VOn];//作用域链

热心网友 时间:2022-04-22 16:22

JavaScript高级程序设计(第4版):上下文中的代码在执行的时候,会创建变量对象的一个作用域链( scope chain)
JavaScript高级程序设计(第3版):当代码在一个环境中执行时,会创建变量对象的一个作用域链( scope chain)。
但是网上大部分博客都是说 在创建的时候就确定了scope chain。我觉得 还是以书为准吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com