js 执行上下文,this指向

执行上下文的创建过程

执行代码之前,进入创建上下文阶段:

初始化作用域链;

创建变量对象:

1.创建argumens对象,初始化参数名称和值并创建引用的复制;

2.扫描上下文的函数声明(而非函数表达式):

为发现的每一个函数,在变量对象上创建一个属性,属性名就是函数的名字,保存一个函数在堆内存中的引用;

如果该属性名已经存在,引用指针将被重写。

3.扫描上下文的变量声明: 为发现的每一个变量声明,在变量对象上创建一个属性,属性名就是变量的名字,并将变量的值初始化为undefined; 如果该属性名已经存在,将不会进行任何操作并继续扫描。 计算上下文内部this的值。

this用法总结

全局环境下的 this 指向全局本身;

独立调用的函数中的 this 指向 undefined;

函数调用时如果被某一个对象所拥有,那么函数内部的 this 指向该对象;

函数调用时如果使用了 call/apply/bind 方法,那么函数内部的 this 指向传入的对象;

构造函数和原型方法上的 this 指向使用 new 方法返回的实例对象;

箭头函数中 this 的绑定取决于外层作用域(全局或函数)。

原文地址:https://www.cnblogs.com/gudun/p/10881966.html