如何将socket.on中函数的值保存为全局变量
How to save value from a function inside socket.on to a global variable?
这可能很简单,但我对用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();
。在这种情况下我该怎么做?
非常感谢。
socket.on
的第二个参数是一个所谓的回调函数,这是javascript中非常常见的模式。在您的示例中,您正在收听"新"事件。当此事件发生时,将使用参数p
触发回调。当然,这个参数只能在回调函数本身内部使用。
需要明确的是:您不直接调用第二个示例中的函数。一旦"新闻"事件发生,就会调用它。
回调模式非常方便,因为它允许您编写非阻塞代码。在等待"news"事件发生时,socket.on
调用后的任何代码都会正常执行。这就是您无法在回调之外访问p
的原因:您不知道回调将在什么时间点被调用。
我想您已经阅读了更多关于Javascript的事件循环或函数及其范围的内容。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- 保存全局变量以供指令监视的最佳方法
- 如何将socket.on中函数的值保存为全局变量
- 像cookie这样的全局变量,它在回发后保留值,但应该为不同的实例保存不同的值(选项卡/窗口)
- 将输入数据保存到全局变量
- 保存正则表达式匹配项的全局变量名称是什么
- 创建一个类来保存javascript中的全局变量
- Javascript Ajax将onreadystatechange的结果保存在全局变量中
- Titanium appcelerator sqlite将lastInsertRowId保存到全局变量
- 美元.获取和保存全局变量
- 将服务数据保存到控制器的全局变量中
- 如何在JavaScript中保存带有大量全局变量的项目
- 美元.getJSON不会将数据保存到全局变量/对象中,这是本地的
- 用jquery保存全局变量img属性位置
- 无法将event.target.id保存到全局变量中