【问题标题】:Put a variable outside the brackets [duplicate]将变量放在括号外[重复]
【发布时间】:2021-11-06 18:38:45
【问题描述】:

最近开始研究node.js,遇到了“ReferenceError: b is not defined”的问题。通过一些简单的操作,我得到了套接字函数中的变量 (b)。但是,我在函数之外计算接收到的信息。在这种情况下,程序无法确定从何处获取变量 (b)。我尝试使用变量返回,但它没有用。当我在函数中使用变量 (b) 时,没有问题。告诉我如何正确解决这个问题。

var io = require('socket.io')(serv,{});
io.sockets.on('connection', function(socket){
    console.log('new connection!');
    
    socket.on('clntMsg',function(data){
        var b = eval(data);
        console.log(data);
        return b;
    });


});
var a = b % 3;

谢谢,错误消失了,在这个表单中一切正常。

var io = require('socket.io')(serv,{});
var b
var a
io.sockets.on('connection', function(socket){
    console.log('new connection!');
    
    //var a = b % 3;
    socket.on('clntMsg',function(data){
        b = eval(data);
        a = b % 3;
        console.log(data);
        
        socket.emit('serverMsg',{
            msg:(a),
        });
    });
});

但一旦我尝试这样做:

var io = require('socket.io')(serv,{});
var b
io.sockets.on('connection', function(socket){
    console.log('new connection!');
    
    socket.on('clntMsg',function(data){
        b = eval(data);
        console.log(data);
    });
        socket.emit('serverMsg',{
            msg:(a),
        });
});
var a = b % 3;

然后在客户端发出“null”。

【问题讨论】:

  • 在回调函数内部做var a = b % 3有什么问题?

标签: node.js function socket.io var referenceerror


【解决方案1】:

当你在函数内部声明一个变量时,它被认为是函数的局部变量,你不能从外部访问它。 您可以通过在函数外部将 b 声明为全局变量,然后在函数内部对其进行更改来解决此问题:

var b;
var io = require('socket.io')(serv,{});
io.sockets.on('connection', function(socket){
    console.log('new connection!');
    
    socket.on('clntMsg',function(data){
        b = eval(data);
        console.log(data);
    });


});
var a = b % 3;

但请注意,您只能在调用函数后使用分配给 b 的新值,因此异步内容可能会导致问题。

【讨论】:

  • 这样做没有多大意义,因为 b 只会在回调执行后定义。这意味着它无论如何都会给出未定义的错误。
  • 是的,这就是我在警告中所说的,但由于我不知道提问者代码的整个结构,所以我只是给出了一般性的答案。
  • 谢谢,错误消失了。但是有一个新问题。 (在帖子中描述)
  • 出现了新问题,因为代码在将 b 分配 eval(data) 之前尝试将 b%3 分配给“a”。 “io.sockets.on(...)”行;只定义函数,并在后台等待'clntMsg'。所以“var a = b % 3;”在声明之后运行,没有分配 b。
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 2019-05-19
  • 2017-05-24
相关资源
最近更新 更多