js作用域链是什么意思

js作用域链是什么意思


达令说
浏览 592回答 2
2回答

慕码人8056858

JavaScript中所有的量都是存在于某一个作用域中的除了全局作用域, 每一个作用域都是存在於某个作用域中的在试图访问一个变量时JS引擎会从当前作用域开始向上查找直到Global全局作用域停止例如12345678910var A;//全局作用域function B(){    var C;//C位于B函数的作用域    function D()    {        var E;//E位于D函数的作用域        alert(A)    }}当alert(A)时, JS引擎沿着D的作用域, B的作用域, 全局作用域的顺序进行查找.这三个作用域组成的有序集合就成为作用域链至于为什么叫链, 你可以理解和链表有相似之处, 深层的作用域会能够访问到上层作用域, 就如同链表中两个连续节点能够单向访问一样 

千巷猫影

执行上下文每当控制器到达ECMAScript可执行代码的时候,控制器就进入了一个执行上下文.执行上下文是个抽象概念,标准中没有从技术实现上定义执行上下文的具体结构和类型.就是一系列活动的执行上下文从逻辑上形成一个栈(比较抽象).栈底总是全局上下文,栈顶是当前(活动的)执行上下文.当在不同的执行上下文间切换(退出而进入新的执行上下文)的时候,栈会被修改(通过压栈或者出栈的形式).变量对象执行上下文的数据是以变量对象的属性形式进行存储的.一个变量对象(简写为VO)是一个和执行上下文相关的特别对象,存储以下内容:变量(声明的变量,var)函数声明(简写为FD)在上下文中,函数声明的形式参数作用域链作用域链是一条变量对象的链,它和执行上下文有关,用于在处理标识符的时候进行变量查询.函数上下文的作用域链在函数调用的时候创建出来,它包含了活跃对象和该函数的内部[[Scope]]属性.执行上下文变量大致如下:activeExecutionContext = {VO:{...},//或者AOthis:thisValue,Scope:[//作用域链,所有变量对象的列表,用来查询标识符]}上面Scope可以定义如下:Scope = AO+[[Scope]]可以用数组进行表示:var Scope = [VO1,VO2,...,VOn];//作用域链
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript