了解匿名函数node.js

时间:2014-10-30 12:04:31

标签: javascript node.js

我正在关注一本关于node.js的书的代码,在javascript上是新的

var net = require('net');
var chatServer = net.createServer();
chatServer.on('connection', function(client){
    client.write('Hi!\n');
    client.write('Bye!\n');
    client.end();
});
chatServer.listen(9000);

我试图取出功能

function(client){
    client.write('Hi!\n');
    client.write('Bye!\n');
    client.end();
}

来自参数,但由于“客户端”未在“on”方法之外定义,因此无效。

我相信我明白这个部分是做什么的,它是作为参数传递的匿名函数,但我不明白“客户”的定义在哪里或者为什么会这样。我理解“客户端”就像一个对象,并且具有“写入”和“结束”的方法,但我看不出方法“on”如何知道它是什么类型的对象。

我的意思是,如果我将“客户端”更改为“doh”,代码仍然有效。 这是node.js的某种魔力,还是我真的不懂javascript?

2 个答案:

答案 0 :(得分:0)

on知道connection侦听器将返回一个对象。当您在function(varname)函数的第二个参数中添加on时,侦听器会将结果传递给您定义的函数的参数。

答案 1 :(得分:0)

此处on(...)方法可以在对象connection上停留一个名为chatServer的事件。

这意味着您的chatServer对象将在内部连接过程中调用您的匿名方法。

  

但由于“客户”未在“开启”方法之外定义,因此无效。

客户端不是您的函数的名称,它是您的参数。没有名字就不能叫匿名方法!如果你想外化该方法给她一个名字。

例如,通过以下方式替换您的疑虑:

chatServer.on('connection', myFunction});

然后给你的功能命名:

function myFunction(client){
    ...
}

chatServer将具有内部代码,可以调用您的函数。参数中给出的变量只是对自己的指示,他的名字只能在你的函数范围内使用