在 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";
})();
我正在用 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";
})();