直接上程式碼:
var test = { outer: function () { // 此时this指向test对象 console.log(this); function inner() { // 此时this指向window console.log(this); } inner(); } }
造成上述程式碼this指向不同的原因是什麼呢?
到現在都是很明白,求大神解答!
拋出函數借用和建構函數,就剩兩種,一種是普通函數,一種是物件方法。
對象方法指向對象,普通函數指向全域
誰呼叫了這個函數,那麼this就指向誰。
this
this的指向只和你如何呼叫這個函數有關,例如你說第一個this指向test,這可不一定,有的是辦法把這個this的指向改掉。只有當你運行test.outer()的時候,第一個this才會指向test。
test
test.outer()
/a/11...
這是閉包問題,在給一個物件透過物件字面量進行了賦值屬性其中包括一個函數方法,這個函數方法有個控制台輸出,然後這個函數裡面又聲明一個函數形成了閉包問題,閉包在一般情況下this都是指向window的.有特殊情況可以改變this的值你可以看看我寫的一篇有關閉包的文章你會有收穫的手機不方便貼你可以看我個人資料
其實把匿名回答的都不對!在物件裡函數內部定義的函數,是不能直接取得上一級環境變數的,更不能直接得到裡面的this 要對她定義變數比如var that=this;這也你就能拿到上級的this物件; var test = {
outer: function () { // 此时this指向test对象 var that=this console.log(this); function inner() { // 此时this指向window console.log(that); } inner(); } }
拋出函數借用和建構函數,就剩兩種,一種是普通函數,一種是物件方法。
對象方法指向對象,普通函數指向全域
誰呼叫了這個函數,那麼
this
就指向誰。this
的指向只和你如何呼叫這個函數有關,例如你說第一個this
指向test
,這可不一定,有的是辦法把這個this
的指向改掉。只有當你運行test.outer()
的時候,第一個this
才會指向test
。/a/11...
這是閉包問題,在給一個物件透過物件字面量進行了賦值屬性其中包括一個函數方法,這個函數方法有個控制台輸出,然後這個函數裡面又聲明一個函數形成了閉包問題,閉包在一般情況下this都是指向window的.有特殊情況可以改變this的值你可以看看我寫的一篇有關閉包的文章你會有收穫的手機不方便貼你可以看我個人資料
其實把匿名回答的都不對!在物件裡函數內部定義的函數,是不能直接取得上一級環境變數的,更不能直接得到裡面的this 要對她定義變數比如var that=this;這也你就能拿到上級的this物件;
var test = {