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);
我一直在努力完成非常出色的 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);