在HTML网页的代码中,“尝试它”按钮会使Google地图显示在窗口中,以用户的位置为中心。它通过调用getLocation()来执行此操作,getLocation()又调用showPosition()。但是,行
中没有传递参数 navigator.geolocation.getCurrentPosition(showPosition);
并且showPosition被定义为接受参数。您在下面看到的代码表明了这一点。在试验时,我通过从定义中删除参数来修改代码,但地图不再出现。下面的代码是显示地图的版本。
<button onclick="getLocation()">Try It</button>
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
function showPosition(position) {
var mapProp= {
center:new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
zoom:13,
};
var map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
}
</script>
看到这个后我很好奇。当showPosition()没有传递给它时,参数“position”是如何访问的?如果有人能解释我会非常感激的原因。
答案 0 :(得分:0)
getCurrentPosition
正在使用showPosition
回调函数。这意味着它调用它并提供position
作为第一个参数。如果您要向showPosition
提供参数,getCurrentPosition
将使用返回值。
答案 1 :(得分:0)
尚未在您发布的代码中调用ShowPosition。 navigator.geolocation.getCurrentPosition(showPosition);
正在将函数 showPosition传递给getCurrentPosition。 getCurrentPosition可以在其代码中调用showPosition或将其传递给另一个函数
答案 2 :(得分:0)
如果查看geolocation.getCurrentPosition
的文档,您会看到第一个参数是成功回调函数。这意味着getCurrentPosition
执行函数以在确定用户的位置时传递给它。然后它将位置值传递给该回调函数 - 在本例中为showPosition
。
答案 3 :(得分:0)
https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition
getCurrentPosition
的参数是一个函数。在Javascipt中,职能是“一流的公民”。并可以像这样的参数传递。
文档说明getCurrentPosition
的工作方式是它接受一个回调参数success
(在这种情况下,它是函数showPosition
),然后将调用该函数具有位置的位置参数。这就是showPosition
如何得到它的论点。
这是Javascript中用于处理异步函数的一种非常常见的模式。因为getCurrentPosition
可能需要一些时间来执行,而不是调用它并等待返回值准备好,所以你传递它的函数。然后它会在准备就绪后调用那些函数。
答案 4 :(得分:0)
navigator.gelocation.getCurrentPosition
的第一个参数是函数showPosition
。此时它实际上并没有调用showPosition
,只是将其作为参数发送。你感到困惑的原因是因为你看不到getCurrentPosition
的定义,它可能看起来像这样:
function getCurrentPosition(callbackFunction) {
var position = {};
callbackFunction(position)
}
当然我实际上并不知道currentPosition是什么样的,我只是用它来演示showPosition
如何从中接收一个参数。