为什么这个函数没有返回任何值?

时间:2011-12-07 12:15:43

标签: javascript function return

我需要将变量传递给另一个函数,但它不会返回任何内容。 注意:它不会向外部返回任何内容,但是如果我在函数内部执行document.write,则它可以完美地运行..

<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>

5 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

您只能从函数返回一个值。如果要返回多个值,请创建一个对象并设置其中的值以返回。否则使用数组返回多个值

答案 2 :(得分: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

答案 3 :(得分:2)

.getCurrentPosition()函数异步执行,然后在完成后调用Location()。与此同时,调用getCurrentPosition()之后的任何内容都将执行,但无法使用任何结果。这也意味着从Location()返回的任何内容都不会被任何其他代码使用。

所以你需要在Location()内调用你的其他功能。

(另外,一般来说,关于函数返回,你需要返回一个值或一个对象/数组。以逗号分隔的返回值列表实际上只返回列表中的最后一个。)

答案 4 :(得分:1)

只要位置可用,

navigator.geolocation.getCurrentPosition就会异步调用传递的函数(例如,在用户接受提示后,如果网站可能知道该位置)。

您需要在Location函数中继续使用代码 - 并且不要返回任何内容,因为它不会在任何地方使用。