2011-12-07 134 views
1

我需要將變量傳遞給另一個函數,但它不返回任何東西。 注意:它不返回任何東西到外面,但如果我做的函數內部文件撰寫它完美..爲什麼這個函數沒有返回任何值?

<script type="text/javascript"> 
//funtion1 
    if (navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(Location); 
     } 
    function Location(position){ 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
    return (latitude,longitude); 
     } 


//function2 
    function initialize() { 
     document.write(latitude); 
     document.write(longitude);} 
</script> 
+0

我知道我不叫它,但它仍然有效!它只是沒有輸出值 – jony

+2

我推薦閱讀一些基本的JavaScript教程,而不是跳入深層,嘗試去做一些事情,而不去理解語言的最簡單概念。 –

回答

2

您可以從函數返回只有一個值。如果您想返回多個值,請創建一個對象並將其設置爲返回值。否則,使用數組返回多個值

9

您誤解了一些概念。

首先,return (a, b)將評估爲return b。逗號運算符幾乎不需要。如果你想返回一個數組,使用return [a, b]

其次,getCurrentPosition是異步的。如果它找到了位置,它將執行Location。所以在你撥打document.write的時候,這個位置還沒有被提取。

最後,你根本沒有使用返回值。如果您想使用函數的返回值,請使用例如var result = func(...)。然而,在這種情況下,這是沒有意義的。

我不完全知道你在做什麼,但是依賴位置的任何東西都應該放在回調函數內(在這種情況下爲Location)。只有當回叫被稱爲poision時纔可用。在這個回調函數中,返回值沒有意義,因爲返回值沒有用於getCurrentPosition

編輯:看你的代碼,你想是這樣的,而不是return荷蘭國際集團:

function Location(position) { 
    var latitude = position.coords.latitude; 
    var longitude = position.coords.longitude; 

    useValuesForSomethingElse(latitude, longitude); // call other function with position data 
} 
+0

感謝擡起頭來有關返回(A,B) – jony

1

navigator.geolocation.getCurrentPosition異步儘快調用傳遞函數爲可用的位置(例如,用戶接受後,提示該網站是否知道該位置)。

您需要在Location函數中繼續您的代碼 - 並且不會返回任何內容,因爲它不會在任何地方使用。

+0

很好,因爲它似乎我不是能夠輸出價值觀生病被迫把函數2期函數裏面,但它根本不是我想要的。我的代碼會變得更厚更重。 – jony

+0

這正是你應該做的**你可以調用另一個函數並將參數傳遞給它。 – ThiefMaster

2

嘗試改變你的代碼如下:

<script type="text/javascript"> 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
     document.write(latitude, longitude); 
    }); 
    } 
</script> 

當位置被檢索您傳遞到getCurrentPosition()功能將得到執行。只有您有權訪問該位置,您才能設置latitudelongitude變量並將它們寫入文檔。

在你的代碼getCurrentPosition()將被調用,然後立即之後document.write(latitude,longitude);將得到執行是前路latitudelongitude可用。您必須將document.write()移動到Location()

更新1(基於評論):

如果你不想做document.write()回調函數裏面,但你要調用另一個函數,則必須從回調函數調用它。

它看起來是這樣的:

<script type="text/javascript"> 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
     myFunction(latitude, longitude); 
    }); 
    } 

    function myFunction(latitude, longitude) { 
    // you can do here anything you wish 
    document.write(latitude, longitude); 
    } 
</script> 

更新2(基於評論和更新的問題):

一種方法如何根據位置來處理加載地圖是調用initialize()Location()latitudelongitude作爲參數。爲了確保在加載頁面時執行HTML元素的代碼可以在Location()內執行。

window.onload = intialize(latitude, longitude); 

一個完整的代碼見this

+0

我想要的不是在函數內部做一個document.write()! 我想獲得的價值,並在另一個功能使用它們 – jony

+0

@jony:我更新了我的答案。 – kubetz

+0

謝謝,它好像完全是我想要的hwat,馬上就對它進行測試! – jony

2

.getCurrentPosition()功能異步執行,然後在完成時調用Location()。與此同時,在致電getCurrentPosition()之後會發生任何事情,但無法處理。這也意味着您從Location()返回的任何內容都不會被其他代碼使用。

所以,你需要從Location()中調用你的其他功能。 (另外,一般談到函數返回時,你需要返回一個值或者一個對象/數組,實際上只能返回列表中最後一個返回值的逗號分隔列表。)