socket.io node.js中的全局变量javascript无法正常工作

时间:2014-08-04 21:10:51

标签: javascript node.js variables socket.io global-variables

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

3 个答案:

答案 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 //你应该期待0,因为你输出了这个   在套接字收到消息之前

     遗憾的是,x仍然是:5 //耶!它已更新(假设在'键'消息后收到'页面'消息