繁体   English   中英

socket.io node.js javascript中的全局变量不起作用

[英]global variable in socket.io node.js javascript not working

真正的基本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

这是因为在console.log(“ outside,x is” + x)中,由于函数作用域,实际上没有设置x is。 尝试:

console.log("outside, x is " + socket);

由于x在您的套接字函数中返回。

使用以下语句创建新的函数范围变量x:var x = value; 在函数中它将覆盖您的全局变量。 删除您的“ var”,仅设置x = value即可访问全局变量。

在为x分配新值时,已使用var关键字,这使x在声明其的匿名函数中是局部的。它与在该函数外部的x 删除该var关键字,您将获得:

x首先是0

x现在是5

在外面,x是0 // //应该在这里期望0 ,因为在套接字收到消息之前输出了这个

x仍然很不幸:5 //是! 它已更新(假设在“关键”消息之后收到“页面”消息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM