我需要将变量传递给另一个函数,但它不会返回任何内容。 注意:它不会向外部返回任何内容,但是如果我在函数内部执行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>
答案 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()
的函数将在检索到位置时执行。只有这样您才能访问该职位,并且您可以设置latitude
和longitude
个变量并将其写入文档。
在您的代码中getCurrentPosition()
将被调用,然后在document.write(latitude,longitude);
执行之后立即执行latitude
和longitude
可用。您必须将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()
,latitude
和longitude
作为参数。为了确保在加载页面时执行使用HTML元素的代码,您可以在Location()
内执行。
window.onload = intialize(latitude, longitude);
有关完整代码,请参阅 this 。
答案 3 :(得分:2)
.getCurrentPosition()
函数异步执行,然后在完成后调用Location()
。与此同时,调用getCurrentPosition()
之后的任何内容都将执行,但无法使用任何结果。这也意味着从Location()
返回的任何内容都不会被任何其他代码使用。
所以你需要在Location()
内调用你的其他功能。
(另外,一般来说,关于函数返回,你需要返回一个值或一个对象/数组。以逗号分隔的返回值列表实际上只返回列表中的最后一个。)
答案 4 :(得分:1)
navigator.geolocation.getCurrentPosition
就会异步调用传递的函数(例如,在用户接受提示后,如果网站可能知道该位置)。
您需要在Location
函数中继续使用代码 - 并且不要返回任何内容,因为它不会在任何地方使用。