In a previous question,我被鼓励提出这样的跟进:如果我只知道some.func
,将函数(arg) => some.func(arg)
包装成some.func
之类的内容会有什么不同有一个论点?
作为一个具体的例子:在我的另一个问题中,我发现使用
之间存在惊人的差异.on("mouseover", tip.show)
与
.on("mouseover", (d) => tip.show(d))
在这种情况下,第一个版本确实具有预期的行为,而第二个版本的行为则不同(请参阅jsfiddle of other question)。这里的原因是我不小心让tip
成为全球性的。
更一般的问题:为什么它们首先表现不同?
答案 0 :(得分:3)
当您使用tip.show(d)
时,将调用该函数作为tip
值传递this
。
当您使用tip.show
作为事件侦听器时,将使用当前事件目标作为this
值进行调用。
var obj = {checkThis: function(e) {
console.log(this === e.currentTarget, this === obj);
}};
document.body.addEventListener('click', obj.checkThis); // true, false
document.body.addEventListener('click', e => obj.checkThis(e)); // false, true
document.body.click();

答案 1 :(得分:2)
有两个主要区别。
我们需要查看更多上下文来确定在这种情况下应用哪些内容。
this
this
函数中show
的值取决于函数的调用方式。
如果事件处理程序是函数本身,则this
是绑定事件处理程序的对象。
如果事件处理程序是调用tip.show
的函数,则this
为tip
。
进一步阅读:How does the “this” keyword work?
在一种情况下,在注册事件处理程序时评估tip.show
的值。
在第二个中,在触发事件处理程序时评估该值。