当函数作为参数传递时,参数如何传递给该函数?
在HTML页面的代码中,按钮“Try It”会导致Google地图出现在以用户位置为中心的窗口中。它通过调用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()中的参数“位置”在没有传入时会如何访问?如果有人能解释我将非常感激的原因。
getCurrentPosition
正在使用showPosition
的回调函数。这意味着它会调用它并提供position
作为第一个参数。如果您要提供参数showPosition
,则getCurrentPosition
将使用返回值。
ShowPosition尚未在您发布的代码中调用。 navigator.geolocation.getCurrentPosition(showPosition);
正在将函数 showPosition传递给getCurrentPosition。 getCurrentPosition可以在其代码中调用showPosition或将它传递给另一个函数
如果您查看geolocation.getCurrentPosition
的文档,您会看到第一个参数是成功回调函数。这意味着getCurrentPosition
在确定用户的位置时执行传递给它的函数。然后它将位置值传递给该回调函数 - 在本例中为showPosition
。
https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition
getCurrentPosition
的参数是一个函数。在Javascipt函数中是'头等公民',可以像这样传递参数。
的文档指出getCurrentPosition
的工作方式是,它接受一个回调参数success
(在这种情况下,它是功能showPosition
),然后会调用这个函数与位置参数时,它具有的位置。这就是showPosition
得到它的论点。
这是一个用于处理异步函数的Javascript中非常常见的模式。由于getCurrentPosition
可能需要一些时间才能执行,而不是调用它并等待返回值准备就绪,您可以将它传递给函数。然后,它会在准备就绪时调用结果。
navigator.gelocation.getCurrentPosition
的第一个参数是功能showPosition
。在这一点上,它实际上并没有调用showPosition
,只是将它作为参数发送。为什么你感到困惑的原因是因为你看不到的定义getCurrentPosition
,这很可能是这个样子:
function getCurrentPosition(callbackFunction) {
var position = {};
callbackFunction(position)
}
当然,我真的不知道是什么currentPosition貌似,我只是用它来演示showPosition
如何从中接收到一个参数。
这是一个回调函数。这里有更多关于getCurrentPosition方法的信息(https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition),并且因为它是JavaScript,所以在回调中阅读是必需的 –
你的问题可以被看作是对“无点”风格的简单介绍。这里有更深入的例子。请享用! http://lucasmreis.github.io/blog/pointfree-javascript/ –