需要访问函数外部和另一个函数内部的变量

时间:2017-02-19 15:46:59

标签: javascript

我有一个问题,我想从FeederBot函数内部访问data.names,这样我就可以访问从客户端发出的名字了。但我不知道该怎么做。我希望在feed.nickname = data.names的feed bot中访问该变量。有什么帮助吗?

io.on('connection', function(socket) {

    socket.on('login', function(data) {
        console.log("User connected with id:" + data.uuid + " Bot names: " + data.names);
        socket.room = data.uuid;
        socket.join(data.uuid);

        if (data.type == "server") {
            io.sockets.in(socket.room).emit("force-login", "server-booted-up");
        }
    }.bind(this));

    socket.on('pos', function(data) {
        //console.log(socket.room + " : " + data);
        io.sockets.in(socket.room).emit('pos', data);
    });

    socket.on('cmd', function(data) {
        console.log(data);
        io.sockets.in(socket.room).emit('cmd', data);
    });

    socket.on("spawn-count", function(data) {
        io.sockets.in(socket.room).emit("spawn-count", data);
    });

    socket.emit("force-login", "startup");

});

function FeederBot(bot_id, agent, bot_number, server) {

    this.bot_id = bot_id; //ID of bot for logging
    this.interval_id = 0; //here we will store setInterval's ID
    this.ball_id = null;
    this.server = ''; //server address will be stored here
    this.client = new AgarioClient('Bot_' + this.bot_id); //creates new client
    this.client.debug = 0;
    this.client.agent = agent;
    this.client.headers['user-agent'] = config.userAgent;
    if (facebookManager.hasAvailableToken()) {
        this.client.auth_token = facebookManager.getToken();
    }
    this.isOnFeedMission = false; this.nickname = "Exper"

    this.lastsent = {minx: 0, miny: 0, maxx: 0, maxy: 0};
    this.onboard_client(server, bot_number);
}

1 个答案:

答案 0 :(得分:1)

var outsideVar = null;

function functionOne() {
  outsideVar = 1;
}

function functionTwo() {
  console.log(outsideVar);
}

functionOne(); // set the value of your var
functionTwo(); // output in console should be 1

只需查看您定义vars的范围即可。 js在这种情况下工作,您可以访问在定义函数之前定义的变量,并且在定义函数的同一范围级别上

编辑: 为了更好地理解

var dataStorage = null; // before you enter any { scope with socket

{
  // ...
  socket.on('login', function(data) {

    dataStorage = data; // <<- write data to the global var dataStorage

    console.log("User connected with id:" + data.uuid + " Bot names: " +        data.names);
    socket.room = data.uuid;
    socket.join(data.uuid);

    if (data.type == "server") {      
      io.sockets.in(socket.room).emit("force-login", "server-booted-up");
    }

  }.bind(this));
  // ..
}

function FeederBot(bot_id, agent, bot_number, server) {

  this.bot_id = bot_id; //ID of bot for logging
  this.interval_id = 0; //here we will store setInterval's ID
  this.ball_id = null;
  this.server = ''; //server address will be stored here
  this.client = new AgarioClient('Bot_' + this.bot_id); //creates new client
  this.client.debug = 0;
  this.client.agent = agent;  
  this.client.headers['user-agent'] = config.userAgent;
  if (facebookManager.hasAvailableToken()) {
    this.client.auth_token = facebookManager.getToken();
  }
  this.isOnFeedMission = false; 
  this.nickname = "Exper"

  // and here you can access the global var again. 
  // make sure u test for not null and the property exists
  if(!!dataStorage) {
    if(dataStorage.hasOwnProperty('names')){
      this.nickname = data.names;
    }
  }

  this.lastsent = {minx: 0, miny: 0, maxx: 0, maxy: 0};
  this.onboard_client(server, bot_number);

}