2011-12-07 136 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()中调用你的其他功能。 (另外,一般谈到函数返回时,你需要返回一个值或者一个对象/数组,实际上只能返回列表中最后一个返回值的逗号分隔列表。)