我想知道为什么如果我在侦听器函数之外声明一个函数,this
将是未定义的,但是如果我对delner函数内部的函数this
进行定义将被定义..
工作:
someClass.each(function(i) {
someClass.eq(i).on('click', (e) => {
var targetClass = this.classList[0],
console.log(targetClass);
});
}); // this will be defined as the clicked class
不工作:
someClass.each(function(i) {
someClass.eq(i).on('click', buttonClick)
});
buttonClick = (e) => {
var targetClass = this.classList[0],
console.log(targetClass);
}); // this will be undefined
答案 0 :(得分:3)
对将使用object.method()语法调用的方法使用非箭头函数。这些函数将从调用者那里获得有意义的这个值。
箭头函数在词法上绑定它们的上下文,因此这实际上是指原始上下文。所以你不能在这些场景中使用箭头功能。
Source(特别是“这是什么?”部分)
答案 1 :(得分:0)
当你输入匿名关闭时,范围会发生变化,而在你的第二个功能中,范围会发生变化,这个'指向buttonClick函数外的Object。您可以执行以下操作以使代码正常工作
buttonClick = (e) => { // I'm assuming e = event object
var targetClass = e.currentTarget.classList[0],
console.log(targetClass);
});