在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的存在。 在全局范围内声明它,也就是不在函数内部,让所有的函数看到它。 这也意味着一旦它在一个函数内被分配了一个值,在其他函数中使用它的值将被保留。