js系列十二:this对象

前面我们已经讲过,当函数被调用执行时,变量对象会生成,这个时候,this 的指向会确定。因此首先要牢记一个重要的结论,当前函数的 this 是在函数被调用执行时才会确定的。如果当前的执行上下文处于函数调用栈的栈顶,那么这个时候变量对象会变成活动对象,同时 this 的指向确定。
正是由于这个原因,才导致一个函数内部的 this 到底指向谁是非常灵活并且不确定的,这也是 this 难以被正真理解的原因所在。例如下面这个例子

var a = 10;
var obj = {
	a: 20,
}
function fn() {
	console.log(this.a);
}
fn() // 10
fn.call(obj) // 20

通过 a 值的不同表现,我们可以知道this 分别指向了 window 和 obj

1 全局对象中的 this
在这之前变量对象的学习中曾提到过,全局对象的变量对象是一个比较特殊的存在,在全局对象中,this 指向他本身,因此相对简单,没有那么多复杂的情况需要考虑。

// 通过this 绑定在全局对象
this.a2 = 20;

// 通过声明绑定变量对象,但是在全局环境中,变量对象就是他本身
var a1 = 30;

// 仅仅只有变量赋值操作
a3 = 10;

// 输出结果
console.log(a1);
console.log(a2);
console.log(a3);

2 函数中的 this
在上面这些例子当中,同一个函数中的 this 由于调用方式不同,this 的指向都是不同的,因此,this 最终指向谁,与函数调用有关。

在一个函数的执行上下文中,this 由该函数调用者提供,由调用函数的方式来决定其指向,

function fn() {
	console,log(this);
}
fn(); // fn 为函数调用者

如果函

你可能感兴趣的:(this,对象,javascript入门到进阶,js系列十二:this,对象)