2012-05-02 79 views
1

對於下面的代碼段什麼時候評估「this」?

a.b = function c(){ 
    return function e(){ 
     return this; 
    }; 
}; 
d = a.b(); 

什麼將d的值()是什麼?這可能不是一個很好的例子,但我只是對「this」會引用什麼感到困惑。

感謝,

+1

您可以嘗試做console.log(this);函數內部 –

+0

我的投票將是「執行時間」。 – aroth

+0

這個問題幾乎被問及如何用正則表達式解析HTML(lol)。 http://stackoverflow.com/questions/3320677/this-operator-in-javascript – Marty

回答

4

眼見爲d將現在等於一個功能「這」將被計算到任何函數調用它。它尚未實際評估過。

在執行結束時,d='function e() { return this; }',所以您執行d()的那一刻是this將被評估。

+2

但是在這種情況下''this'將在'd()'被調用時被評估爲'window'。 – bfavaretto

+0

確切地說,當'd()'最終被評估,但你是對的。之所以如此,是因爲不是對象的子對象的所有東西都是窗口的子對象,所以將'd()'想象爲'window.d()',因此它指向窗口。 – DanRedux

0

this是所有函數的隱式參數。

applycall

如果你知道蟒蛇,this就像是self,但沒有明確的書面和永遠存在

0

假設d()在您的代碼段d()的最後一行將返回全局對象window後立即被調用(如果您在瀏覽器中)。

但是兩者都是正確的:

d.call(a) === a; 
d.call(a.b.prototype) === a.b.prototype; 

這是說,this是由什麼傳遞作爲第一個參數call定義。

1

從你的代碼d不同於「this」。 d將是一個函數E,因爲你設置d是函數調用AB()返回一個函數的返回值,所以

d = function e(){ 
    return this; 
} 

現在的this值取決於你如何調用這個函數d 。當調用此函數時,將評估this。如果你只是稱之爲d()this將是全球Window對象。

,並讓說,如果我有

obj ={foo:1, bar:2}; 

和我這樣調用

d.call(obj) 

this將obj對象。 call()方法用於在任何對象上調用函數,傳遞的對象在該函數內的行爲如this

我知道Javascript這真的很讓人困惑,並且不容易讓你的頭在附近。 可能是這可以幫助http://devlicio.us/blogs/sergio_pereira/archive/2009/02/09/javascript-5-ways-to-call-a-function.aspx

0

this是對調用方法的對象的引用。 (如果沒有with指令)

相關問題