JS:帮助我理解为什么我不能使用这个预定义函数作为回调

JS: Help me understand why I cannot use this pre-defined function as callback

我一直在努力完成非常出色的 learnyounode。我对其中一项练习的解决方案如下所示:

var http = require('http'),
var url = process.argv[2];

http.get(url, function(response){
  response.on("data", function (data){
    console.log(data.toString())
  });
});

以上代码有效。不过,我也试过这个:

var http = require('http');
var url = process.argv[2];

http.get(url, function(response){
  response.on("data", readData(data));
});

function readData(data) {
  console.log(data.toString());
}

我收到错误 'data not defined'(第 5 行)。为什么是这样?我调用函数的方式与调用匿名回调的方式不同吗?据我了解,response.on 的第二个参数应该是一个函数,但该函数是命名的还是匿名的应该没有区别。为什么不起作用?

您现在所做的实际上是调用 readData 而不是将其作为 function.

传递

试试这样:

var http = require('http');
var url = process.argv[2];

http.get(url, function(response){
  response.on("data", readData);
});

var readData = function(data) {
  console.log(data.toString());
}

您没有将函数作为回调传递,您传递了它的 return 值。 使用 "readData(data)" 将调用函数并传递值 returned。 然而,要传递回调,您只需要写下函数的名称。

这就是你的做法:

response.on("data", readData);