首页 > 解决方案 > 当命名函数回调不需要参数时调用什么?

问题描述

我对 JavaScript 相当陌生(学习 Node.JS),但我用 OOP 语言编写代码已经有一段时间了。我觉得我了解大多数 JS 概念,但我很想了解更多关于这个让我大吃一惊的功能。

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

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

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

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

标签: javascriptnode.js

解决方案


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

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

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

完全一样

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

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

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

如果您像在原始代码中一样传递函数本身,则无法仅通过查看该行来判断该函数实际接受多少参数或调用回调时使用了多少参数,尽管 - 可能没有,可能是许多。


推荐阅读