在下面的代码中,我使用node.js发出一个简单的get
请求,并将响应记录到控制台。这完全没问题,但为什么呢? response.on
部分发生了什么?为什么console.log
和console.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) // <---
})
答案 0 :(得分:1)
他们 做 接受参数。他们将参数视为response.on
的回调为他们提供的内容。
将函数内联传递为匿名函数:
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
。然后你通过这个名称作为参数传递它,你先前在其中定义了整个函数内联
(这也是IMO的一个更好的做法。特别是如果你发现你自己将内联函数传递到一个以上的级别,你可以得到严重的回调地狱问题。(more info))
类似地,console.log
也是(命名)函数,因此您也可以将其作为参数传递:
response.on('data', console.log)