我在寫一些JavaScript代碼。我對這個關鍵詞有點困惑。如何訪問dataReceivedHandler
函數中的記錄器變量?Javascript「this」scope
MyClass: {
logger: null,
init: function() {
logger = LogFactory.getLogger();
},
loadData: function() {
var dataReceivedHandler = function() {
// how to access the logger variable here?
}
// more stuff
}
};
_「由於dataReceivedHandler是一個匿名函數,它將引用全局範圍上的窗口對象。」_ - 當您通過名稱「dataReceivedHandler」引用它時,它不是匿名的。匿名或不是'this'的值取決於函數是如何被調用的,而不是它如何定義的(正如你大概知道給出你的第二個例子)。請注意,只有在調用'loadData()'方法將'this'設置爲'MyClass'對象時,您的答案中的兩種方法纔會起作用。 – nnnnnn 2013-04-05 00:32:39
當聲明一個沒有返回變量名稱的函數('function(){}'而不是'function name(){}')時,這就是你所說的匿名函數。匿名函數的上下文將始終是'window',除非被諸如'call'或'apply'之類的方法覆蓋。我錯了嗎?如果是這樣,請舉例說明否則。 – iMoses 2013-04-05 00:35:55
我正在糾正自己。如果匿名函數是對象(名稱空間)的一部分,只要直接從該對象執行該方法,就會引用該對象。 – iMoses 2013-04-05 00:37:41