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

时间:2016-07-07 07:09:44

标签: javascript node.js

请帮我整理下面的代码 -

    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)
})

我希望在第二个括号关闭后})

访问和合并'人'和'地方'

3 个答案:

答案 0 :(得分:0)

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

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;
      }
})

答案 1 :(得分:0)

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;
})

答案 2 :(得分:0)

您可以使用javascript closures来完成该操作。您使用var定义的任何变量都可用于内部结构。您可以定义外部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将带有位置的对象数组传递回调,因此您可以像处理任何其他数组一样处理它:

globalPeople[0].latitude

或者遍历它:

globalPeople.forEach(...)

例如,只显示它:

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