我在写一些JavaScript代码,对于this关键字还有点困惑。在dataReceivedHandler
函数中如何访问logger变量呢?
MyClass: {
logger: null,
init: function() {
logger = LogFactory.getLogger();
},
loadData: function() {
var dataReceivedHandler = function() {
// how to access the logger variable here?
}
// more stuff
}
};
dataReceivedHandler
是一个匿名函数,所以this
将指向全局作用域的 window 对象。当您通过名称dataReceivedHandler
引用它时,它不再是匿名的。无论是否匿名,this
的值取决于该函数被调用的方式,而不是定义方式(正如您可能已经知道的第二个示例)。请注意,只有在以将其this
设置为MyClass
对象的方式调用loadData()
时,您答案中的两种方法才有效。 - nnnnnnfunction() {}
而不是function name() {}
),这就是所谓的匿名函数。匿名函数的上下文始终为window
,除非通过诸如call
或apply
之类的方法进行覆盖。我错了吗?如果是,请提供一个证明相反的例子。 - iMosesself = undefined
来实现这一点,这将使垃圾收集器更容易地摆脱数据/引用(如果需要的话)。 - iMoses