当命名函数回调不需要参数时,它叫什么?

时间:2018-06-15 21:32:34

标签: javascript node.js

我是JavaScript的新手(学习Node.JS),但我已经用OOP语言编写了很长时间。我觉得我理解大多数JS概念,但我想更多地了解这个令我难以置信的功能。

参数绑定如何在此工作? console.log()如何在这里获取数据?这只有在只有一个默认参数时才有效吗?

function processResponse (res) {
  res.on('data', console.log)
  res.on('error', console.error)
}

当回调函数不需要明确它收到的参数时,它会调用什么?它与Function.prototype.apply() / call() / bind()有关吗?只是想进一步理解。

编辑:我确实知道函数引用可以传递。我想知道console.log如何在这里接收它的参数(幕后机制是什么)

1 个答案:

答案 0 :(得分:3)

函数是Javascript中的一等公民 - 你可以传递它们就像你可以传递任何其他变量一样。在你的代码中,并不是console.log不需要任何参数,而是你传递函数本身,然后随后用所需的参数调用

假设res.on仅使用一个参数调用其回调,为简单起见:

res.on('data', console.log)

完全相同
res.on('data', (arg) => console.log(arg))

相比之下,接受 no 参数的函数看起来像这样:

res.on('data', () => console.log())

如果你像原始代码一样传递函数本身,你不能仅仅通过查看该行来告诉函数实际接受多少个参数或者调用回调的参数多少 - 可能是没有,可能很多。