在socket.io范围内使用var

时间:2015-07-21 12:48:40

标签: javascript node.js sockets socket.io

我在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

2 个答案:

答案 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 = {};

这应该让它发挥作用。

正如一些额外的解释,现在你正在那个生物功能中创建你的用户变量,所以任何不在该功能内的东西都不知道你的存在用户变量。在类的全局范围内声明它,也就是说不在函数内部,让你的所有函数都能看到它。这也意味着一旦在一个函数内部赋值,它就会在其他函数中使用时保留其值。