【问题标题】:Global variables are undefined within function scope全局变量在函数范围内未定义
【发布时间】:2015-06-07 23:00:06
【问题描述】:

我有这段代码,其中变量纬度和经度在 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.

)};

感谢您的帮助!

【问题讨论】:

  • 代码似乎正确 - 验证 positonSuccess 是否被事先调用。
  • @ConnorPeet - positionSuccess 是异步的,因此稍后在 $(document).ready() 回调函数完成执行后调用。这就是导致问题的原因 - 请参阅下面的答案。

标签: javascript


【解决方案1】:

欢迎使用 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

)};

【讨论】:

  • 哇,很棒的答案 - 它绝对让我明白了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多