ECMA-262-3 深入解析.第四章.作用域链
导言 在第二章关于变量工具的描写中,我们已经知道一个执行上下文 (变量、函数声明和函数的形参)的数据作为属性存储在变量工具中。 同时我们也知道变量工具在每次进入上下文时建设,并填入初始值,值得更新呈此刻代码执行阶段。 这一章专门接头与执行上下文直接相干的更多细节,这次我们将说起一个议题——浸染域链。 界说 假如要扼要的描写并展示其重点,浸染域链大大都与内部函数相干。 我们知道,ECMAScript 应承建设内部函数,我们乃至能从内部函数中返回这些函数。 var x = 10; function foo() { var y = 20; function bar() { alert(x + y); } return bar; } foo()(); // 30 这样,很明明每个上下文拥有本身的变量工具 ,对付全局上下文,它是全局工具自身,对付函数,它是激活工具。 浸染域链完满是内部上下文全部变量工具(包罗父变量工具)的列表。此链用来变量查询。即在上面的例子中,“bar”上下文的浸染域链包罗AO(bar)、AO(foo)和VO(global)。 可是,让我们细心研究这个题目。 让我们从界说开始,并进深一步的接头例子。 浸染域链与一个执行上下文相干,变量工具的一条链在标识符理会顶用于变量查找。 一个函数上下文的浸染域链在函数挪用时建设包括激活工具和这个函数内部的[[scope]]属性。下面我们将更具体的接头一个函数的[[scope]]属性。 在上下文中表示如下: activeExecutionContext = { VO: {...}, // or AO this: thisValue, Scope: [ // Scope chain // list of all variable objects // for identifiers lookup ] }; 这里scope界说如下: Scope = AO + [[Scope]] 这种连系和标识符理会进程,我们将在下面接头,这与函数的生命周期相干。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |