上下文环境的初始化在代码执行前完成
JS有三种作用域:全局作用域、函数作用域、eval作用域(不常用,不做介绍)。
在JS代码执行前,首先会对这三种作用域进行上下文环境的准备工作,准备内容如下:
- 全局作用域的上下文准备工作
- 将全局变量设为undefined
- 将函数表达式的值设为undefined
- 为函数声明直接赋值
- 将window对象赋给this
- 函数作用域的上下文准备工作
- 确定自由变量的作用域
- 为函数的参数和arguments对象赋值
- 将局部变量的值设为undifined
- 将函数表达式的值设为undifined
- 为函数声明直接赋值
- 全局作用域的上下文准备工作
//将全局变量的值设为undefined
console.log(a); //undefined
var a = 1;
//将window对象赋给this
console.log(this);