我正在关注一本关于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?
答案 0 :(得分:0)
on
知道connection
侦听器将返回一个对象。当您在function(varname)
函数的第二个参数中添加on
时,侦听器会将结果传递给您定义的函数的参数。
答案 1 :(得分:0)
此处on(...)
方法可以在对象connection
上停留一个名为chatServer
的事件。
这意味着您的chatServer
对象将在内部连接过程中调用您的匿名方法。
但由于“客户”未在“开启”方法之外定义,因此无效。
客户端不是您的函数的名称,它是您的参数。没有名字就不能叫匿名方法!如果你想外化该方法给她一个名字。
例如,通过以下方式替换您的疑虑:
chatServer.on('connection', myFunction});
然后给你的功能命名:
function myFunction(client){
...
}
chatServer将具有内部代码,可以调用您的函数。参数中给出的变量只是对自己的指示,他的名字只能在你的函数范围内使用