我已经得到了一些代码,其中变量纬度和经度被声明在positionSuccess函数之外,然后在positionSuccess函数内部定义。我想稍后重新使用这些变量,但它们会继续作为未定义返回。不知道为什么。
我认为如果它们是在函数之外定义的,那么它们应该在与其他函数相同的范围内可用。我在这里错过了什么吗?
$(document).ready(function(){
navigator.geolocation.getCurrentPosition(positionSuccess, positionError);
// Gets the user's location
var latitude;
var longitude;
function positionSuccess(position){
latitude = position.coords.latitude;
longitude = position.coords.longitude;
}
function positionError(error){
console.warn('ERROR: ' + error.code + ': ' + error.message);
}
// Other functions that need access to latitude and longitude variables.
)};
感谢您的帮助!
答案 0 :(得分:5)
欢迎使用Javascript进行异步编程。因为代码不是在函数中从上到下顺序执行的,所以异步回调需要一种不同的编写代码的方法,它们接收的结果必须在回调中处理,而不是在回调之外。
positionSuccess
和positionError
是异步回调。在$(document).ready()
处理程序执行完毕后,它们被称为long。因此,当您尝试使用latitude
和longitude
变量时,它们尚未设置。
任何需要positionSuccess()
内部结果的代码都必须放在该回调函数中,或者您可以调用其他函数并将结果变量传递给它。
$(document).ready(function(){
navigator.geolocation.getCurrentPosition(positionSuccess, positionError);
function positionSuccess(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// insert code to use the latitude and longitude variables here
}
function positionError(error){
console.warn('ERROR: ' + error.code + ': ' + error.message);
}
// the latitude and longitude data is not yet available here because
// positionSuccess() is called in the future AFTER this part of
// the code executes
)};