没有定义参数的Javascript函数调用?

问题描述 投票:0回答:2

我是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 parameters socket.io callback
2个回答
0
投票

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函数将存储该参数以供以后调用(提供套接字作为参数)。


0
投票

您正在传递函数,因此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

因此它将套接字传递给您的函数。

© www.soinside.com 2019 - 2024. All rights reserved.