繁体   English   中英

如何在JavaScript中的函数外部访问局部变量?

[英]How to access local variable outside a function in JavaScript?

请帮助我整理以下代码-

    people.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, people){
  if(err) console.error(err)
  else console.log('people nearby:', people)
})

places.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, places){
  if(err) console.error(err)
  else console.log('places nearby:', places)
})

我想在第二个括号结束后访问并合并“人”和“地方” })

是的,您可以使用全局对象一次访问两者

var mergedObject = {};
people.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, people){
  if(err) console.error(err)
  else {
   mergedObject['people'] = people;
   console.log('people nearby:', people);
   }
})

places.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, places){
  if(err) console.error(err)
  else {
       console.log('places nearby:', places);
       mergedObject['places'] = places;
      }
})
personGeoLocation = {};
people.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, people){
  if(err) console.error(err)
  else personGeoLocation.person = people;
})

places.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, places){
  if(err) console.error(err)
  else personGeoLocation.places = places;
})

您可以使用javascript 闭包来完成该操作。 var定义的任何变量都可用于内部结构。 您可以定义一个外部变量,并从回调内部进行编写。

另一方面,您可能在这里面临的真正问题是,如果people#nearby是异步的,则在显示的块之后数据将不可用,因此您需要进行同步的东西,例如附加功能:

var globalPeople = null;
var globalPlaces = null;

function checkWeHaveBoth() {
  if (globalPeople && globalPlaces)
    doSometing(globalPeople, globalPlaces)
}

people.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, people){
  if(err) console.error(err)
  else {
    globalPeople = people;
    checkWeHaveBoth();
  }
})

places.nearby({latitude: 43.646838, longitude: -79.403723}, 5000, function(err, places){
  if(err) console.error(err)
  else {
    globalPlaces = places;
    checkWeHaveBoth();
  }
})

现在,您可以编写doSomething() ,当两个结果都可用时,它将被调用。

nearby将回调nearby传递给带有位置的对象数组,因此您可以像处理其他数组一样处理它:

globalPeople[0].latitude

或遍历它:

globalPeople.forEach(...)

例如,仅显示它:

function doSomething() {
    console.log(globalPeople);
    console.log(globalPlaces);
}

暂无
暂无

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

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