真正基本的javascript问题:
javascript和node.js中的全局变量,我做错了什么?我已经看到其他帖子的答案是在函数末尾返回值。我尝试了这个,但仍然无法将价值改为" 5"并在我的套接字连接中保持这种方式。任何帮助将不胜感激!
是否可以在匿名函数中更改变量?
var x;
io.sockets.on('connection', function(socket){
x = 0;
console.log("x at first is: " + x);
socket.on('key', function(value){//value = 5
x = value;
console.log("x is now + " + value);
return x;
})
console.log("outside, x is " + x);
socket.on('page', function(){
console.log("x is unfortunately still: " + x);
})
})
我的控制台日志如下所示:
x起初是0
x现在是5
外面,x是0
遗憾的是,x仍为:0
答案 0 :(得分:1)
这是因为在console.log中(“外部,x是”+ x)x由于功能范围而实际上并未设置。尝试:
console.log("outside, x is " + socket);
因为x在套接字函数中返回。
答案 1 :(得分:1)
使用以下语句创建新的函数作用域变量x:var x = value; 在函数中,它会覆盖您的全局变量。删除你" var"并且只设置x = value来访问全局变量。
答案 2 :(得分:1)
在为var
分配新值时,您已使用x
关键字,这使得您声明它的匿名函数的x
是本地的。它不是与该函数之外的x
相同。删除var
关键字,即可获得:
x起初是0
x现在是5
外面,x是0 //你应该期待
遗憾的是,x仍然是:5 //耶!它已更新(假设在'键'消息后收到'页面'消息0
,因为你输出了这个 在套接字收到消息之前