小型网站开发,聊城集团网站建设加盟,自动优化网站建设电话,施工企业信用评价全局 / 私有变量作用域的概念作用域链 scopeChain 的概念作用域链 scopeChain 的形成函数执行步骤作用域链查找机制
全局 / 私有变量
全局变量#xff1a;在全局上下文EC(G)中的全局变量对象VO(G)中,存储的变量 私有变量#xff1a;在函数执行形成的私有上下文EC(XXX)中的变…全局 / 私有变量作用域的概念作用域链 scopeChain 的概念作用域链 scopeChain 的形成函数执行步骤作用域链查找机制
全局 / 私有变量
全局变量在全局上下文EC(G)中的全局变量对象VO(G)中,存储的变量 私有变量在函数执行形成的私有上下文EC(XXX)中的变量对象AO(XXX)中存储的变量 包括
当前函数执行形成的上下文中声明过的变量或者函数函数定义的形参变量
作用域的概念
当前函数[[Scopes]] 当前函数创建时候所在的上下文 简单来说函数的作用域取决于当前函数创建时候的上下文哪个上下文创建作用域就是谁
作用域链 scopeChain 的概念
scopeChain当前EC, 函数[[scope]] 查找变量时按照该链式关系找(先找自己上下文自己没有按照作用域链向上级作用域找) 包含
当前形成的上下文当前函数所对应的scope作用域
作用域链 scopeChain 的形成
作用域链是在函数执行的时候形成的
函数执行步骤
创建私有上下文EC(有存放私有变量的变量对象AO)进栈执行(把全局上下文放在后面)初始化作用域链 scopeChain当前EC函数[[scope]]初始化 this 指向形参赋值(包括初始化 arguments)变量提升代码执行执行完可能出栈(也可能不出栈)
作用域链查找机制
在当前上下文中代码执行的过程中遇到一个变量时首先看它是否是私有的
如果是私有的接下来的所有操作都是操作自己如果不是私有的则按 作用域链 scopeChain 进行查找在哪个上下文找到当前变量就是谁的 3 .一直找到全局上下文为止如果找到 EC(G) 都找不到 a.获取变量会直接报错 b.设置值则直接给 GO(window) 加属性
script typetext/javascriptfunction a(){function b(){function c(){}} }
/script
// 以a函数的作用域为例
a defined a.[[scope]]--0:GO
a doing a.[[scope]]--0:aAO1:GOb defined b.[[scope]]--0:aAO1:GOb doing b.[[scope]]--0:bAO1:aAO2:GO
c defined c.[[scope]]--0:bAO1:aAO2:GO
c doing c.[[scope]]--0:cAO1:bAO2:aAO3:GO经典例题1 经典例题2
参考
作用域图解