this究竟指向谁-执行上下文

首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(直接调用它的函数)

1)按照我们上面说的this最终指向的是最后调用它的对象,在没有被它的上一级对象调用时,这里的函数a实际是被Window对象所点出来的,下面的代码就可以证明。

function a(){
    var user = "素凡";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();//相当于window.a();

2)return 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

//例子2:
function fn()  
{  
    this.user = '素凡';  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined

3)特殊情况:this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子4中虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;
j();

猜你喜欢

转载自blog.csdn.net/qq_40151857/article/details/82817029