[英]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.