2014-10-30 57 views
-3

我下面一本书的node.js的代码,JavaScript的了解匿名函数的node.js

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”方法之外定义。

我相信我明白这个零件是做什么的,它是一个作为参数表传递的匿名函数,但我不明白“客户”在哪里定义或者为什么。我知道“客户端”就像一个对象,并有方法“写”和“结束”,但我看不到方法“上”知道它是什么样的对象。

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

+0

客户端是您传递的匿名函数的调用者传递的对象。 – developer82 2014-10-30 12:10:16

+0

所以我需要了解的是“on”方法是如何工作的。谢谢。 – 2014-10-30 12:17:08

回答

0

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

0

on(...)方法在此处适用于对象chatServer上名为connection的事件。

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

但它没有奏效,因为“客户端”未在“on”方法之外定义。

客户端不是你的函数的名字,它是你的参数。如果没有名字,你不能调用匿名方法!如果你想给这个方法外化,给她一个名字。

例如通过更换您的suscribtion:

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

然后给一个名字给你的函数:

function myFunction(client){ 
    ... 
} 

的的ChatServer将内部代码至极将调用你的函数。参数中给出的变量只是您自己的一个指示,他的名字只能用于您的功能范围

+0

谢谢你,这就是我试图做的事情(至少我知道如何定义一个函数)。我的失败是,一旦我定义了一个函数,我做了'chatServer.on('connection',myFunction(client)});',那没有奏效。相反,白色'chatServer.on('连接',myFunction});'它的工作原理。 – 2014-10-30 12:26:55