深入理解 javascript 2
2017-05-04 14:06:19 0 举报
登录查看完整内容
js
作者其他创作
大纲/内容
执行上下文的代码被分成两个基本的阶段来处理:
抽象为
组成
AO/VO 在代码解释期间被修改
AO/VO 已经被属性(不过,并不是所有的属性都有值,大部分属性的值还是系统默认的初始值undefined )填满
VO(functionContext)
栈stack
激活对象AO
具体的函数代码不包括内部函数代码
进入执行上下文
全局上下文(global context)
顶部
底部
全局上下文中的变量对象VO(globalContext)
可执行代码(executable code)
1、正式调用函数的方式影响了调用的上下文中的this值;2、this的值由调用者提供,且由调用函数的方式决定;
全局上下文中的变量对象就是全局对象自身;在全局上下文中声明一个变量时,我们才能够通过全局对象的属性间接访问到这个变量
调用上下文 (calling context)
全局代码不包括任何函数体内的代码
函数声明
函数声明 形式参数声明 变量声明
未保存的函数表达式只有在它自己的定义或递归中才能被调用。 “x” 并不存在于AO/VO中。而FunctionExpression“_e”保存到了已声明的变量“e”上,所以它仍然存在于内存中(就是还在AO/VO中)。
2
堆heap
执行上下文 EC
GlobalContextVO (VO === this === global)
变量对象VO
Eval代码
AO['c'] = 10;AO['e'] = ;
激活对象 是在进入函数上下文时刻被创建的
EC类型的变量被推入或者弹出时
函数的形参
全局对象Global object
有关
VO(globalContext) === Global object
——变量对象的一个属性,这个属性由变量名称和undefined值组成;如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性。
存储
函数的所有形式参数(如果我们是在函数执行上下文中)
EC的属性
1、不同的具体执行上下文中,VO的名称和初始结构都不同;2、变量对象是在执行上下文时创建的,不是在执行代码时创建的;3、函数表达式不会影响变量对象VO/AO;4、不带Var赋值与带Var声明的变量是不同的;5、不带Var赋值的不是变量,而是全局对象的属性,可以用delete删除;6、变量有一个特性是{ Don't Delete }
this
1、全局对象(Global object) 是在进入任何执行上下文之前就已经创建的对象;这个对象只存在一份,它的属性在程序中任何地方都可以访问,全局对象的生命周期终止于程序退出那一刻。2、this在全局上下文中的值始终是全局对象本身
VO(functionContext) === AO
AbstractVO (generic behavior of the variable instantiation process)
变量
函数代码
FunctionDeclaration ,缩写为FD—— 变量对象的一个属性,这个属性由一个形式参数的名称和值组成;如果没有对应传递实际参数,那么这个属性就由形式参数的名称和undefined值组成;
——变量对象的一个属性,这个属性由一个函数对象(function-object)的名称和值组成;如果变量对象已经存在相同名称的属性,则完全替换这个属性。
执行代码
函数上下文
每次进入函数
修改
全局上下文
当前(活动的)执行上下文
当进入“test”函数的上下文时(传递参数10)
this: thisValue
1
全局代码
收藏
收藏
0 条评论
回复 删除
下一页