this的繫結(四種繫結)
this的預設繫結
當一個函式沒有明確的呼叫物件的時候,也就是單純作為獨立函式呼叫的時候,將對函式的this使用預設繫結:繫結到全域性的window物件
例子1:
function foo(){ console.log(this===window) } foo();//true
重點:迷惑性的例子
function fn(){ function fn1(){ console.log(this===window); } fn1(); } fn();//true
函式fn1在一個外部函式fn裡面宣告並且呼叫了,他的this依然指向window,因為【沒有明確的呼叫物件時,講對函式的this使用預設繫結:繫結到全域性的window物件】
加強版迷惑例子:
var obj = { fn:function(){ function innerfn(){ console.log(this===window); } innerfn();//獨立呼叫 } } obj.fn();//true
這裡例子中,obj.fn()呼叫實際上是用了this的隱式繫結
【總結】凡是函式作為獨立函式呼叫,無論它的位置在哪,它行為表現都和直接在全域性環境中呼叫無異
this的隱式繫結
當函式被一個物件所“包含”的時候,我們稱函式的this被隱式繫結到這個物件裡面,這時候,通過this可以直接訪問所繫結的物件裡面的其他屬性
例子:
var obj = { a:1, fn:function(){ console.log(this); function fn1(){ console.log(this); } fn1(); } } obj.fn();
結果