【发布时间】:2017-11-04 00:28:28
【问题描述】:
假设有两个函数。
function foo(callback) {
...
}
function bar() {
...
}
假设 bar 不需要参数,我调用 foo(bar) 和 foo(() => bar()) 有什么区别?
我最近前一个发生了关于this 上下文的错误,而第二个工作正常。我知道箭头函数将this 上下文绑定到函数中,我不知道有什么区别。
仅供参考,这是有问题的代码。
socket.disconnect(socket.connect); // line 1
socket.disconnect(() => socket.connect()); // line 2
socket.disconnect(function() { socket.connect(); }); // line 3
我刚刚发现问题可能与上下文无关。它可能是应用或绑定的东西。因为第 2 行和第 3 行工作正常,而只有第 1 行显示错误。
【问题讨论】:
-
你研究过
this的主题吗?有很多关于 SO 的信息,您可以通过简单的搜索找到... -
“我知道箭头函数绑定了这个上下文”,不,它不绑定任何上下文,
this将是它在外部范围内的任何内容。 -
"箭头函数是匿名的并且改变 this 在函数中的绑定方式。"我在文档中读过。
-
是的,因为它们首先不绑定任何东西:"箭头函数没有自己的
this;使用封闭执行上下文的this值" MDN doc -
@PatrickEvans 我只是发现这不是胖箭头问题......但我仍然很好奇有什么区别
标签: javascript ecmascript-6 callback