首先this和作用域(执行上下文)不是一回事,作用域是在js引擎编译时确定的,而this是在执行过程中确定的,谁调用,this就是指向的谁;没有明确的调用者,this就指向window;也可以使用.call、.bind、.apply指定this。虽然不是一回事,但是他们是绑定在一块的,作用域中包含着this。
在举个例子,帮助理解this。
function Func() {
this.name = 1
}
const f = new Func()
在这段代码中,Func为一个构造函数,f是通过构造函数创建的一个实例,那这个创建的过程是这样的呢?
首先,在执行到new操作的时候,会先创建一个空对象,然后执行Func().call(空对象),先把Func的this改为空对象,然后在执行Func,执行完后,之前的空对象里就有了name属性并被赋值为1,最后把这个对象返回,之后f就存下了这个对象在内存中的地址了。