在socket.io范围外使用var

我正在nodejs聊天,我想在socket.io范围外使用var用户,但它不断给我一个undefined

这里是我的代码,设置用户变种

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

在javascript中提升问题。

例:

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

会是这样的

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

您需要在全局范围内设置用户。 在你的代码的最上面写下:

 var users = {}; 

这应该得到它的工作。

正如一些额外的解释,现在你正在创build你的用户variables内的生物function,所以任何不在该函数内部不知道你的用户variables的存在。 在全局范围内声明它,也就是不在函数内部,让所有的函数看到它。 这也意味着一旦它在一个函数内被分配了一个值,在其他函数中使用它的值将被保留。