赞
踩
前面我们已经讲过,当函数被调用执行时,变量对象会生成,这个时候,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 最终指向谁
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。