为啥我的变量不取函数中的值?

Posted

技术标签:

【中文标题】为啥我的变量不取函数中的值?【英文标题】:Why does my variables dont take the value in the function?为什么我的变量不取函数中的值? 【发布时间】:2013-02-13 17:15:14 【问题描述】:

我想在屏幕上显示 var longitude en latitude 但我认为该函数是最后执行的,并且我坚持使用初始值。 目标是在屏幕上打印浏览器返回的地理位置的确切值。 谢谢!!!

<!DOCTYPE html>


<head>

<script>
var longitude = "10";
var latitude = "20";
</script>




</head>
<html>
<body  onload="getLocation()">


<script>
var longitude = "30";
function getLocation() 

    if (navigator.geolocation) 
            navigator.geolocation.getCurrentPosition(function(position)
                latitude = position.coords.latitude;
                longitude = position.coords.longitude;
                alert('aaab:' +longitude);
    );
    else 
                   alert("Geolocation API is not supported in your browser.");
    
    

</script>



<script>
alert("ccc");
document.write (longitude);
document.write (latitude);

</script>
</body>
</html>

我知道它在函数内工作,但有什么方法可以在外部使用这些变量?我只想能够将它们存储在一个可以在任何地方调用的全局变量中。谢谢

【问题讨论】:

【参考方案1】:

document.write 在更新它的代码运行之前被执行。您需要像这样在回调中执行 document.write:

<!DOCTYPE html>
  <head>
    <script type='text/javascript'>
      var longitude = "10";
      var latitude = "20";

      function getLocation() 
        if (navigator.geolocation) 
          navigator.geolocation.getCurrentPosition(function(position)
            latitude = position.coords.latitude;
            longitude = position.coords.longitude;

            document.write(latitude+" / "+longitude);  
          );
        else
          alert("Geolocation API is not supported in your browser.");
        
      

    </script>
  </head>
  <body onload="getLocation()">

  </body>
  </html>

【讨论】:

我知道它在函数内工作,但是有什么方法可以在外面使用这些变量吗?我只想能够将它们存储在一个可以在任何地方调用的全局变量中。谢谢 全局变量被设置为纬度和经度。您的问题很简单,直到您的原始 document.write 运行之后才会发生。为了清楚起见:jsfiddle.net/Asvjg 好的,谢谢,我明白了【参考方案2】:

试试这个:

function getLocation() 

    if (navigator.geolocation) 
            navigator.geolocation.getCurrentPosition(displayLocation);
    else 
                   alert("Geolocation API is not supported in your browser.");
    


    function displayLocation(position) 
       latitude = position.coords.latitude;
       longitude = position.coords.longitude;
       alert('aaab:' +longitude);
    

【讨论】:

【参考方案3】:

在您编写经度和纬度时,可能尚未调用地理位置回调。也许您可以使用 jQuery 将正确的值写入屏幕...

<script>
    var longitude = "30";
    function getLocation() 

        if (navigator.geolocation) 
            navigator.geolocation.getCurrentPosition(function(position)
                latitude = position.coords.latitude;
                longitude = position.coords.longitude;
                //alert('aaab:' +longitude);

                // Use jQuery to write your values to the html
                $("#longitude").html(longitude);
                $("#latitude").html(latitude);
            );
        else 
            alert("Geolocation API is not supported in your browser.");
        
    

</script>

<html>
    ...
    <body onload="getLocation()">
        <div id="longitude"></div>
        <div id="latitude"></div>
    </body>
</html>

【讨论】:

正确,对getCurrentPosition() 的调用是异步的。浏览器使用一些线索(例如您的 IP 地址)来查询地理定位服务(例如 Google)。一个快速的解决方案是将您的 document.write() 语句放在您定义的回调中。我将编辑此答案以显示这一点。我自己打字,但@Syjin 打败了我 :) 你又打败了我,先生 :) 我知道它像你说的那样工作,我有“ alert('aaab:' +longitude); ”工作正常,但我需要在函数之外使用这些变量。 你可以在任何你喜欢的地方使用它们。你只需要等到getCurrentPosition() 被调用。 是的,我想,但是,我不知道该怎么做,页面首先执行正文,然后执行功能。

以上是关于为啥我的变量不取函数中的值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥@interface 中声明的变量中的值不会在 XCTest 中的方法之间持续存在?

为啥我的变量仅在 Python 中的某个函数/语句中发生变化?

为啥我的线程函数中的局部变量会被其他线程中断?

为啥我的 iOS 录音回调中的音频缓冲区未满?

为啥我需要一个局部变量来将 SqlParameter 中的值从 Ajax 存储到 WCF 方法

为啥我的 bash 脚本无法识别 date 命令中的变量?