当函数作为参数传递时,参数如何传递给该函数?

时间:2017-04-21 17:41:19

标签: javascript html

在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”是如何访问的?如果有人能解释我会非常感激的原因。

5 个答案:

答案 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如何从中接收一个参数。