我在nodejs中聊天,我想在socket.io范围之外使用var用户,但它一直给我一个未定义的
这是我设置用户var的代码
socket.on('bio', function(data) {
for (var i = 0; i < data.length; i++) {
users[data[i].name] = {
avatar: data[i].avatar,
steamid: data[i].steamid,
name: data[i].name,
userid: data[i].id,
admin: data[i].admin
}
}
});
在这里我尝试使用它,但它说它未定义
textarea.addEventListener('keydown', function(event) {
var self = this;
if (event.which === 13 && event.shiftKey === false) {
socket.emit('input', {
timeStamp: moment().format("YYYY-MM-DDTHH:mm:ss"),
name: chatName,
userid: users[chatName].id,
message: self.value
});
event.preventDefault();
}
});
这可能是一些愚蠢的事情,但我还处于学习阶段:D
答案 0 :(得分:1)
在javascript中提升问题。
示例:
var v = "hello";
(function(){
console.log(v);
var v = "world";
})();
就像这样
var v = "hello";
(function(){
var v; //declaration hoisting
console.log(v);
v = "world";
})();
答案 1 :(得分:0)
您需要在全局范围内设置用户。在代码的顶部只需写下:
var users = {};
这应该让它发挥作用。
正如一些额外的解释,现在你正在那个生物功能中创建你的用户变量,所以任何不在该功能内的东西都不知道你的存在用户变量。在类的全局范围内声明它,也就是说不在函数内部,让你的所有函数都能看到它。这也意味着一旦在一个函数内部赋值,它就会在其他函数中使用时保留其值。