2017-02-15 56 views
1

我想覆盖一个变量,但不知何故它不工作。 我在这里做错了什么?我的范围有什么问题?为什么我不覆盖变量? js

var url = 'BB'; 

    navigator.geolocation.getCurrentPosition(function (position) { 
     url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude.toString() + ',' + position.coords.longitude.toString(); 
    }); 

    console.log(url); 

应该不是我url得到整个字符串,而不是输出bb

回答

0

由于Adam指出,您在尝试使用url变量赋值之前(除了初始化'BB'之外)。

除非你有一个很好的理由让url变量全局和了解周围异步代码的问题,这是最好的,如果你不申报回调超出这个变量。这会导致你遇到的麻烦。

取而代之的是,在回调中指定的位置。然后在回调中或在回调中调用的函数中执行需要的操作。不要试图将其用作全局变量。

例如,这样的工作,而无需你遇到了问题:

navigator.geolocation.getCurrentPosition(function (position) { 
    var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude.toString() + ',' + position.coords.longitude.toString(); 
    console.log(url); 
}); 
+0

“有一件事你一定要在这里做不声明回调外部的URL变量。” - 我认为这取决于你最终想做什么。 OP没有提供足够的信息让任何人做出关于他是否应该或不应该在回调之外声明URL的判断。 – Adam

+0

@亚当这是一个很好的观点。也许我应该说:“除非你真的知道你在做什么,并有充足的理由,否则不要在回调之外声明'url'。毕竟,在回调之外宣布它并试图在回调之外使用它是导致麻烦的原因。 –