Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中带arrow函数的回调_Javascript_Ecmascript 6_Callback - Fatal编程技术网

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问题。。。但我还是很好奇有什么不同