簡體   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