2017-04-21 283 views
1

在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()中的参数“位置”在没有传入时会如何访问?如果有人能解释我将非常感激的原因。

+1

这是一个回调函数。这里有更多关于getCurrentPosition方法的信息(https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition),并且因为它是JavaScript,所以在回调中阅读是必需的 –

+0

你的问题可以被看作是对“无点”风格的简单介绍。这里有更深入的例子。请享用! http://lucasmreis.github.io/blog/pointfree-javascript/ –

回答

0

getCurrentPosition正在使用showPosition的回调函数。这意味着它会调用它并提供position作为第一个参数。如果您要提供参数showPosition,则getCurrentPosition将使用返回值。

0

ShowPosition尚未在您发布的代码中调用。 navigator.geolocation.getCurrentPosition(showPosition);正在将函数 showPosition传递给getCurrentPosition。 getCurrentPosition可以在其代码中调用showPosition或将它传递给另一个函数

0

如果您查看geolocation.getCurrentPosition的文档,您会看到第一个参数是成功回调函数。这意味着getCurrentPosition在确定用户的位置时执行传递给它的函数。然后它将位置值传递给该回调函数 - 在本例中为showPosition

0

https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition

getCurrentPosition的参数是一个函数。在Javascipt函数中是'头等公民',可以像这样传递参数。

的文档指出getCurrentPosition的工作方式是,它接受一个回调参数success(在这种情况下,它是功能showPosition),然后会调用这个函数与位置参数时,它具有的位置。这就是showPosition得到它的论点。

这是一个用于处理异步函数的Javascript中非常常见的模式。由于getCurrentPosition可能需要一些时间才能执行,而不是调用它并等待返回值准备就绪,您可以将它传递给函数。然后,它会在准备就绪时调用结果。

0

navigator.gelocation.getCurrentPosition的第一个参数是功能showPosition。在这一点上,它实际上并没有调用showPosition,只是将它作为参数发送。为什么你感到困惑的原因是因为你看不到的定义getCurrentPosition,这很可能是这个样子:

function getCurrentPosition(callbackFunction) { 
    var position = {}; 
    callbackFunction(position) 
} 

当然,我真的不知道是什么currentPosition貌似,我只是用它来演示showPosition如何从中接收到一个参数。