我是javascript的新手,并且一直在关注该套接字工作原理的本教程系列:https://www.youtube.com/watch?v=HZWmrt3Jy10。
他写道:
var io = socket(server);
io.sockets.on('connection', newConnection);
function newConnection(socket){
console.log('new connection' + socket.id);
}
newConnection如何在sockets.on中工作?它需要一个套接字参数,但它仍然有效,它也是对该函数的引用。我已经模糊地听到了回调的信息,但仍然感到困惑。有人可以解释发生了什么。
Javascript中的函数是“一流”对象,可以将它们传递,存储在变量中,等等……考虑这个简单的示例:
function foo(x) {
console.log("foo(" + x + ") called");
}
function bar(f) {
f(42);
}
bar(foo);
最后一行调用函数bar
,将其作为参数传递给函数foo
。然后,函数bar
调用它接收的函数f
,并以42
作为参数。
最终结果将是消息foo(42) called
出现在控制台中。
在代码中,您演示了会发生什么情况,即一旦建立连接,on
函数将存储该参数以供以后调用(提供套接字作为参数)。
您正在传递函数,因此socket.on
方法就像传递变量一样。就像变量一样,socket.on
中的代码然后可以使用您的函数,包括向您传递所需的参数。
socket.on()
方法将实现如下:
Socket.prototype.on = function (event, callback) {
// other logic
callback(socket); // pass socket to your newConnection function
}
所以当您打电话:
io.sockets.on('connection', newConnection);
您正在将函数newConnection
作为回调传递(编写socket.on
的程序员可以将其命名为任何东西,然后它将调用您的函数为:]
callback(socket); // callback is second parameter so
// in your case it is pointing to
// newConnection
因此它将套接字传递给您的函数。