这个例子中的fn是什么?

在这个例子中,有一个带有null和false参数的fn函数:

io.configure(function () { function auth (data, fn) { fn(null, false); }; io.set('authorization', auth); }); 

https://github.com/LearnBoost/Socket.IO-node/blob/master/test/manager.test.js#L400-403

什么是fn ,它有什么作用?

这是否意味着,例如function,在这里坚持自己的function,还是这意味着别的?

在这个例子中, fn是一个作为parameter passing给auth()的函数,所以是的,你提供auth()一些你自己select的function。 这就是所谓的“高阶函数”, 这里简单介绍一下。 这是一种主要与函数式编程相关的技术,由于Javascript的对象方向通常被认为有点弱,所以它是JavaScript中更高级的程序所倾向的风格(JavaScript有时被称为“ Java服装中的Scheme ”)。

在这个确切的代码中:它是testing套件的一部分,所以它将ioconfiguration为总是失败授权,以便看到授权失败是正常处理的(现在是408-409行):

 res.statusCode.should.eql(403); data.should.match(/handshake unauthorized/); 

这些行应该没有例外,并且testing检查结果是否包含有意义的值。

fn是一个作为parameter passing给auth的函数。

auth函数在这里被调用 :

 Manager.prototype.authorize = function (data, fn) { if (this.get('authorization')) { var self = this; this.get('authorization').call(this, data, function (err, authorized) { self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized'); fn(err, authorized); }); } else { this.log.debug('client authorized'); fn(null, true); } return this; }; 

所以你看到callback函数接受两个参数, errauthorized 。 在testing中,这些参数设置为nullfalse

很可能在某些时候你可以指定应该是什么,但是这并不是必须的! 也可能是这个函数总是由库提供的,当你设置auth函数时,你的工作就是调用它。