1. 程式人生 > >this究竟指向誰-執行上下文

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();