如何将socket.on中的函数的值保存到全局变量?

时间:2016-04-19 09:51:20

标签: javascript sockets socket.io

这可能非常简单,但我对Javascript编程和使用Socket IO相当新。

当我想从函数内部给出一个全局变量值时,过程非常简单:

var j;

function a(){
j=2;

}
a();
//j is now 2

我现在的问题是,我有一个名为socket.on的方法,里面有一个函数,如下所示:

var j;

socket.on('news', function (p) {
j=p; 
//in here, j is equal to p
});
//in here, j is NOT p, it is undefined.

现在,在这种情况下,我希望我的全局变量j具有p的值,但是当我在函数外部打印j时,它是未定义的。我认为这是因为我需要在函数之外的a();之类的东西,就像在第一个例子中一样。 在这种情况下我该怎么做?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

socket.on的第二个参数是所谓的回调函数,这是javascript中非常常见的模式。在您的示例中,您正在收听“新”事件。发生此事件时,将使用参数p触发回调。当然,这个参数只能在回调函数本身内部使用。

要明确:您直接调用第二个示例中的函数。一旦“新闻”事件发生,就会调用它。

回调模式非常方便,因为它允许您编写非阻塞代码。在等待“新闻”事件发生时,socket.on调用之后的所有代码都正常执行。这就是为什么你无法在回调之外访问p的原因:你不知道在什么时候回调将被调用。

我想您已经阅读了有关Javascript的event loopfunctions and their scope的更多信息。