this是基于上下文环境来变动的
可以用不同的方法进行函数调用,不用的调用机制决定了函数上下文的不同。
调用者 caller 被调用者 callee,this指向 caller。
作为普通函数进行调用时,其上下文环境是全局对象(window)

1.png
作为方法进行调用时,其上下文是拥有该方法的对象(隐式调用)

2.png
作为构造器进行调用时,其上下文是一个新分配的对象

3.png
通过函数的apply()或call()方法进行调用时,上下文可以设置成任意值(显示调用)

4.png