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 最终指向谁

已标记关键词 清除标记
05-08 1945
05-06 2173
实付 79.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值