2017-02-15 93 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'。畢竟,在回調之外宣佈它並試圖在回調之外使用它是導致麻煩的原因。 –