全局变量在函数范围内是未定义的

Global variables are undefined within function scope

本文关键字:未定义 范围内 函数 全局变量      更新时间:2023-09-26

我得到了这段代码,其中变量latitude和longitude在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.
)};

谢谢你的帮助!

欢迎学习Javascript异步编程。因为代码不是在函数中从上到下顺序执行的,异步回调需要一种不同的编写代码的方法,其中它们接收到的结果必须在回调内部处理,而不是在回调外部。

positionSuccesspositionError为异步回调。它们在你的$(document).ready()处理程序完成执行后被调用。因此,当您尝试使用latitudelongitude变量时,还没有设置它们。

任何需要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
)};