如何在更大范围内使用Javascript变量
How to use Javascript variables from a wider scope
我正在用socketio
编写一个简单的WebSocket
应用程序。有2套接字事件,我可以实现,在连接和消息。第一个使用套接字作为参数(客户端),第二个使用从客户端发送的数据。所以我可以这样写,在消息事件中使用套接字变量:
WebSocketNoaListener.onClientConnect = function(socket){
var soc = socket;
socket.on("message", function(msg){
console.log("i can use message: "+msg);
console.log("and the socket: "+soc.id);
});
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect);
}
但我想分开我的函数更好的可读性:
WebSocketNoaListener.onClientConnect = function(socket){
var soc = socket;
socket.on("message", WebSocketNoaListener.onClientMessage);
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect);
}
WebSocketNoaListener.onClientMessage = function(){...
我需要在接收socket
的函数之外的作用域中使用soc
变量。这可能吗?
你真的应该这样做,而不是污染全局空间(此外,在另外两个答案中给出的解决方案不能处理两个同时连接,因为soc
在每个连接上都被覆盖)。
WebSocketNoaListener.onClientMessage = function(soc, msg){
console.log("i can use message: " + msg);
console.log("and the socket: " + soc.id);
};
WebSocketNoaListener.onClientDisconnect = function(soc, event){
console.log("not implemented in question");
};
WebSocketNoaListener.onClientConnect = function(socket){
socket.on("message", WebSocketNoaListener.onClientMessage.bind(this, socket));
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect.bind(this, socket));
}
在onClientConnection函数之外初始化soc
。
var soc;
WebSocketNoaListener.onClientConnect = function(socket){
soc = socket;
socket.on("message", WebSocketNoaListener.onClientMessage);
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect);
}
soc
现在可以在onClientConnect之外访问
ok这里是websocket特定的最终答案;
WebSocketNoaListener.onClientConnect = function(socket){
var soc = socket;
socket.on("message", WebSocketNoaListener.onClientMessage);
socket.on("disconnect", WebSocketNoaListener.onClientDisconnect);
}
WebSocketNoaListener.onClientMessage = function(msg){
console.log("this is the message "+msg);
console.log("and this is the id of the socket "+this.id);
//'this' points here the socket itself
}
相关文章:
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量