Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Javascript函数中正确提取局部变量?_Javascript_Variables_Scope_Geolocation - Fatal编程技术网

如何从Javascript函数中正确提取局部变量?

如何从Javascript函数中正确提取局部变量?,javascript,variables,scope,geolocation,Javascript,Variables,Scope,Geolocation,实际上我有这个代码: var options = { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }; function success(pos) { var crd = pos.coords; var lat = crd.latitude; var lon = crd.longitude; var acc = crd.accuracy; console.log("latitude is ",

实际上我有这个代码:

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  var lat = crd.latitude;
  var lon = crd.longitude;
  var acc = crd.accuracy;
  console.log("latitude is ", lat);

  var mydata = {latitude:lat, longitude:lon, accuracy:acc};
  return mydata;
};

function error(err) {
  console.warn('ERROR(' + err.code + '): ' + err.message);
};

navigator.geolocation.getCurrentPosition(success, error, options);
我对范围管理有很多疑问。如何从函数中获取变量lat、lon和acc?返回不起作用。。。我知道如果我在声明变量时不使用var,这将起作用,但我已经读到这是一种不好的做法。我想提取这三个变量,以便与另一个应用程序(如OpenStreetMap)一起使用。。。或者露天


非常感谢。

在JavaScript中处理异步数据时,这是一个非常常见的问题

这里的技巧是创建一个命名函数,并在回调发生时绑定要更新的上下文:)

下面是一个观察者的示例,当发生成功、错误或任何其他更改时,该观察者将在属性更改时自动更新

HTML

<div id="geolocation">
   <div class="button default"></div>
   <div class="button success">
     <latitude></latitude>
     <longitude></longitude>
     <accuracy></accuracy>
   </div>
   <div class="button error"></div>
</div>
以下是完整的工作示例:


希望有帮助

这可能是最常见的Javascript问题。您的结果是异步的。不能同步使用它们。您必须在回调本身中使用它们,或者从回调调用其他函数,并将它们传递给其他函数。这是你的两个选择。此外,还有大量关于处理异步响应的其他答案和文章。很抱歉,我不清楚这个问题。当你用return说它不起作用时,你面临的问题是什么?@jfriend00是的,抱歉重复这个问题。。非常感谢你的帮助,我会研究更多的。。。那个回叫让我很困惑。@Ashutshupadhyay基本上就像。。如何将局部变量从一个函数传递到另一个函数或全局作用域,而不将该变量声明为全局变量。。。很抱歉给你带来困惑。非常感谢,你帮了我很多忙,我也会对此进行更多研究,以便完全理解。
var success = function(pos) {
  var crd = pos.coords;

  this.default = "latitude is " + crd.latitude;

  var mydata = {
    latitude: crd.latitude,
    longitude: crd.longitude,
    accuracy: crd.accuracy
  };

  this.data = mydata;

}.bind(this);