JavaScript中的全局变量?

时间:2011-04-02 16:27:51

标签: javascript globals

我是Javascript的新手,以下代码让我感到困惑。根据我的理解,您可以通过删除前面的var来为全局变量赋值,并且在首先声明全局时不需要定义任何初始值。但是,为什么以下代码不起作用? (通过不工作我的意思是在main()中调用document.write为“ulat”吐出“undefined”。

var ulat;

function write(latitude) {
    ulat = latitude;
    document.write("<h1> This works:" + ulat + "</h1>");
}

function getloc() {

            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(
                function(position) {
                    write(position.coords.latitude);
                },
                function (error) {
                    switch(error.code) {
                        case error.TIMEOUT:
                            alert ('Timeout');
                            break;
                        case error.POSITION_UNAVAILABLE:
                            alert ('Position unavailable');
                            break;
                        case error.PERMISSION_DENIED:
                            alert ('Permission denied');
                            break;
                        case error.UNKNOWN_ERROR:
                            alert ('Unknown error');
                            break;
                    }
                });

            }
            else {
                alert("Geolocation is not supported by your web browser.");                 
            }       
}


function main() {
      getloc();
      document.write("<h1> This doesn't work: " + ulat + "</h1>");
}

有任何帮助吗?谢谢!

3 个答案:

答案 0 :(得分:4)

getCurrentPosition异步。当你调用它时它不会运行,当你调用它时启动运行。因此,当main检查值时,尚未调用成功回调,并且未向ulat分配任何内容。

所以这就是你的代码所做的:

  1. main被称为
  2. main来电getloc
  3. getloc看到地理位置可用且启动地理定位请求。然后立即返回。
  4. main输出ulat的值,该值仍为undefined
  5. 稍后,您的success回调(或者,当然,失败)会被调用。在那一点上,我有点惊讶你的页面不会变成空白,因为你将在主解析后调用document.write,这意味着document.open,它会删除页面和从一块空白的石板开始。但我不经常使用document.write来记住所有的变幻莫测......

答案 1 :(得分:0)

你需要打电话给main: '主();'

答案 2 :(得分:-1)

var用于局部变量。对于全局变量,仅提供引用或window.reference。尝试修改代码以删除第一行var ulat;