行上下文和执行栈:
执行上下文指的是js代码执行时候的环境,根据js代码执行的环境分为全局执行上下文、函数执行上下文和eval执行上下文。
执行上下文由三部分组成:this绑定、词法环境、变量环境。
This绑定:
This值绑定跟js的抽象类型Reference有关。
//抽象Reference类型的伪代码表示:
var aRef = {
base:
name:
strict reference: //严格模式是否开启
}
This值确定的步骤:
- 将()函数调用前面的js表达式的结果赋值给一个变量ref。
- 判断ref的类型是否为Reference类型。
- 如果js表达式的结果是Reference类型,且base为对象,this值就为getBase(ref)。
- 如果js表达式的结果是Reference类型,且base为当前词法环境中的EnvironmentRecord(环境记录项),那么this的值为undefined。
- 如果js表达式的结果不是Reference类型,this 的值为undefined。
词法环境:
词法环境是一种抽象的规范类型,是基于ECMAScript代码的词法嵌套结构来定义标识符和集体变量和函数的关联。
一个词法环境由环境记录项和一个可能为null的外部词法环境引用组成。环境记录项是存储变量和函数声明的实际位置,外部环境引用意味着它可以访问其父级的词法环境(父级作用域)。