在 socket.io 范围外使用 var

use var outside socket.io scope

我正在用 nodejs 聊天,我想在 socket.io 范围之外使用 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

您需要在全局范围内设置用户。在你的代码的顶部写:

var users = {};

这应该可以正常工作。

正如一些额外的解释,现在您正在该 'bio function' 内部创建您的 users 变量,因此任何不在该函数内部的东西都不知道您的 users 变量的存在。在你的 class 的全局范围内声明它,也就是不在函数内部,让你的所有函数都能看到它。这也意味着一旦它在一个函数中被赋值,它在其他函数中使用时会保留它的值。

javascript 中的提升问题。

示例:

var v = "hello";
(function(){
  console.log(v);
  var v = "world";
})();

会这样

var v = "hello";
(function(){
  var v; //declaration hoisting
  console.log(v);
  v = "world";
})();