console.log 没有参数?这是如何运作的?

Mal*_*rik 5 javascript node.js

可能是一个非常基本的问题,但我还没有在文档或谷歌中找到答案......

我正在做nodeschool的“learnyounode”模块,对于http客户端问题的介绍,找到了一个console.log不带参数使用的官方答案(实际上作为另一个函数中的args,但我理解):

var http = require('http')

http.get(process.argv[2], function (response) {
      response.setEncoding('utf8')
      response.on('data', console.log)
      response.on('error', console.error)
  })
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?它看起来干净、明显,但如果没有更好地理解发生了什么,我不确定我是否可以自信地使用这种风格。


顺便说一句,为了进行比较(并看看我不明白什么),这是我自己的非常相似但更长的答案:

var http = require('http');

http.get(process.argv[2], function callback(response) {
    response.setEncoding('utf8');
    response.on('data', function(data) {
        console.log(data);
    });
    response.on('error', function(error) {
        console.error(error);
    });
});
Run Code Online (Sandbox Code Playgroud)

Phi*_*eck 3

很简单,看看你的代码

response.on('error', function(error) { 
    console.error(error); 
});
Run Code Online (Sandbox Code Playgroud)

您在那里所做的就是编写了一个回调,该回调从错误事件中传递对象,然后您可以将其用作错误。

现在让我们看看其他代码

response.on('error', console.error)
Run Code Online (Sandbox Code Playgroud)

同样的情况也发生了,事件将其对象传递给回调函数,该回调console.error函数接受一个或多个对象。

所以像

let myLog = function(dataToLog) {
    console.log(dataToLog);
}

response.on('error', myLog);
Run Code Online (Sandbox Code Playgroud)

也可以,希望这能让它更清楚一些。