为了账号安全,请及时绑定邮箱和手机立即绑定

js作用域链是什么意思

js作用域链是什么意思

达令说 2019-04-15 08:08:15
js作用域链是什么意思
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

JavaScript中所有的量都是存在于某一个作用域中的

除了全局作用域, 每一个作用域都是存在於某个作用域中的

在试图访问一个变量时JS引擎会从当前作用域开始向上查找直到Global全局作用域停止

例如

1

2

3

4

5

6

7

8

9

10

var A;//全局作用域

function B()

{

    var C;//C位于B函数的作用域

    function D()

    {

        var E;//E位于D函数的作用域

        alert(A)

    }

}

当alert(A)时, JS引擎沿着D的作用域, B的作用域, 全局作用域的顺序进行查找.

这三个作用域组成的有序集合就成为作用域链

至于为什么叫链, 你可以理解和链表有相似之处, 深层的作用域会能够访问到上层作用域, 就如同链表中两个连续节点能够单向访问一样

 


查看完整回答
反对 回复 2019-04-16
?
千巷猫影

TA贡献1829条经验 获得超7个赞

执行上下文

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

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

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

作用域链

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

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

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



查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 591 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信