2017-05-24 35 views
3

叫時請考慮以下變量:爲什麼括號保持這種在同一份聲明中

var obj = { 
    value : 'from object', 
    getValue : function() { return this.value; } 
}; 

var value = 'from global'; 

現在,obj.getValue()評估爲'from object'。如果我得到一個引用只是getValue函數,並調用它:

var f = obj.getValue; 
f(); 

˚F評估爲'from global'

我的問題是爲什麼(obj.getValue)();返回'from object'

我原以爲第一組圓括號會評估爲對getValue函數的簡單引用,然後在調用該結果時,this將是全局上下文。爲什麼解釋者會認爲這是對象的調用?

回答

1

當您撥打var f = obj.getValue();時,您正在從對象運行getValue方法。當您撥打var f = obj.getValue;時,您將重新分配該功能到f,然後當您撥打f時,它與obj沒有任何聯繫,它簡單地稱爲全局功能。

+0

我明白了。我的問題是爲什麼'(obj.getValue)()'保持obj範圍? – Patrick

+0

問題是爲什麼'(obj.getValue)()'充當'obj.getValue()',而在詞法上它看起來更像'f = obj.getValue; f()的' – wostex

相關問題