可执行代码段分为全局代码,函数代码,eval代码,在执行这些代码之前都会经历创建执行上下文的过程。
执行上下文:
执行可执行代码段会创建执行上下文
函数执行的时候会创建执行上下文,通过上下文栈来管理不同的栈,在函数执行的时候创建完该函数的执行上下文的时候压栈。
变量对象
根据不同的可执行代码划分全局上下文的变量对象,函数上下文的变量对象。
执行上下文分为两个阶段处理:分析和执行。分析阶段:首先用arguments初始化活动对象(函数上下文的变量对象称为活动对象,然后给变量对象添加形参,函数声明,变量声明等初始的属性值,执行阶段,更新变量对象的值
这里需区分执行上下文的过程和函数执行的过程,关系是:函数执行 -> 执行上下文创建 -> 执行上下文分析 -> 代码执行 -> 更新活动对象
作用域链
js为词法作用域,意思是作用域是在函数定义的时候就已经确定了,而不是函数执行的时候
至此修正函数从创建到执行过程:
|
|
- this
ecmascript的类型分为语言类型和规范类型,规范类型是指用来用算法描述ecmascript语言结构和语言类型的。包括:Reference, List, Completion, Property Descriptor, Property Identifier, Lexical Environment, Environment Record