js 执行上下文,this指向
执行上下文的创建过程
执行代码之前,进入创建上下文阶段:
初始化作用域链;
创建变量对象:
1.创建argumens对象,初始化参数名称和值并创建引用的复制;
2.扫描上下文的函数声明(而非函数表达式):
为发现的每一个函数,在变量对象上创建一个属性,属性名就是函数的名字,保存一个函数在堆内存中的引用;
如果该属性名已经存在,引用指针将被重写。
3.扫描上下文的变量声明: 为发现的每一个变量声明,在变量对象上创建一个属性,属性名就是变量的名字,并将变量的值初始化为undefined; 如果该属性名已经存在,将不会进行任何操作并继续扫描。 计算上下文内部this的值。
this用法总结
全局环境下的 this 指向全局本身;
独立调用的函数中的 this 指向 undefined;
函数调用时如果被某一个对象所拥有,那么函数内部的 this 指向该对象;
函数调用时如果使用了 call/apply/bind 方法,那么函数内部的 this 指向传入的对象;
构造函数和原型方法上的 this 指向使用 new 方法返回的实例对象;
箭头函数中 this 的绑定取决于外层作用域(全局或函数)。