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