console.log()作为response.on()中的callback

在下面的代码中,我正在用node.js做一个简单的get请求,并将响应logging到控制台。 这工作很好,但为什么? 在response.on节中发生了什么? 为什么console.logconsole.error没有任何参数的情况下工作?

 var http = require('http') http.get('http://www.google.com/index.html', function (response) { response.setEncoding('utf8') response.on('data', console.log) // <--- response.on('error', console.error) // <--- }) 

他们确实有争议。 他们无论response.on什么response.on都会有争论。他们的callback给了他们。

以内联方式传递函数作为匿名函数:

 response.on('data', function(data){ // anonymous function passed inline console.log(data); }); 

就像在外面定义它们并按名称传递它们一样:

 ... response.on('data', callback) ... function callback(data){ // < named function defined outside console.log(data); } 

基本上你所做的是把整个内联函数,在外面定义,并给它一个名称callback 。 然后你通过这个名字作为parameter passing它,你之前定义了整个函数。
(这也是一个比较好的做法,特别是如果你发现自己将内联函数深入到一个以上的层次上,你可能会遇到严重的callback问题( 更多信息 ))。

同样, console.log也是一个(named)函数,所以你也可以把它作为parameter passing:

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