javascript中带arrow函数的回调
假设有两个函数javascript中带arrow函数的回调,javascript,ecmascript-6,callback,Javascript,Ecmascript 6,Callback,假设有两个函数 function foo(callback) { ... } function bar() { ... } 假设bar不需要参数,那么调用foo(bar)和foo(()=>bar())有什么区别 我最近发现前一个出现了关于这个上下文的错误,而第二个运行得很好。我知道arrow函数将这个上下文绑定到函数中,我不知道有什么区别 仅供参考,这是有问题的代码 socket.disconnect(socket.connect); // line 1 socket.disconnect
function foo(callback) {
...
}
function bar() {
...
}
假设bar不需要参数,那么调用foo(bar)
和foo(()=>bar())
有什么区别
我最近发现前一个出现了关于这个上下文的错误,而第二个运行得很好。我知道arrow函数将这个上下文绑定到函数中,我不知道有什么区别
仅供参考,这是有问题的代码
socket.disconnect(socket.connect); // line 1
socket.disconnect(() => socket.connect()); // line 2
socket.disconnect(function() { socket.connect(); }); // line 3
我只是发现问题可能与上下文无关。它可能是带有apply或bind的内容。因为第2行和第3行工作正常,而只有第1行显示错误。首先,您所描述的与箭头函数无关
function foo(callback) {
...
}
function bar() {
...
}
此
的值取决于函数的调用方式。当函数是对象的属性并被称为foo.bar()
时,则中的foo.bar
将引用foo
因此,在上两个示例中,此
将引用套接字
,而不是socket.connect
在第一个示例中,此
将引用另一个值,因为函数不会作为套接字的方法执行。但是,socket.connect
可能预期会有此
引用到socket
简化示例:
函数foo(回调){
回调();
}
变量套接字={
连接(){
“严格使用”;
console.log(this);
},
};
foo(socket.connect);//未定义
foo(()=>socket.connect());//套接字对象
foo(函数(){socket.connect()});//socket对象
您研究过这个
的主题吗?有很多信息,你可以通过简单的搜索找到……“我知道arrow函数绑定此上下文”,不,它不绑定任何上下文,此
将是外部作用域中的任何内容。“arrow函数是匿名的,并更改此函数绑定函数的方式。”我在一个文档中读到了它。是的,因为它们一开始没有绑定任何东西:“一个arrow函数没有自己的this
;使用了封闭执行上下文的this
值”@PatrickEvans我刚刚发现它不是胖arrow问题。。。但我还是很好奇有什么不同