我在写一些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