禁止循环功能

时间:2013-04-09 20:01:18

标签: javascript

函数onSuccess无限期运行,因为不断询问GPS接收器的坐标。它包含一个函数createMap,只执行一次。这是如何实现的?在函数外部创建函数也不能,因为它作为函数变量的参数值传递。

watchID = navigator.geolocation.watchPosition(function(position) {onSuccess(position, arrMyLatLng);}, onError, options);  

function onSuccess(position, arrMyLatLng) 
{

var latitude , longitude ;     
latitude = position.coords.latitude ;
longitude = position.coords.longitude;
var myLatLng = new google.maps.LatLng(latitude, longitude);

createMap(myLatLng, arrMyLatLng);// This feature will run for an indefinite number of times. It is only necessary once. 
map.panTo(myLatLng) ;
}

3 个答案:

答案 0 :(得分:1)

仅运行一次的功能:

function runOnce() {
    if (runOnce.done) {
         return;
    } else {
       // do my code ...

       runOnce.done = true;
    }
}

因为函数是JavaScript中的对象,所以可以在其上设置属性。

答案 1 :(得分:1)

您可以使用闭包创建具有私有状态的函数:

onSuccess = (function() {
    var created = false;
    return function (position, arrMyLatLng) {
        var latitude , longitude ;     
        latitude = position.coords.latitude ;
        longitude = position.coords.longitude;
        var myLatLng = new google.maps.LatLng(latitude, longitude);
        if (!created) {
            createMap(myLatLng, arrMyLatLng);
            created = true;
        }
        map.panTo(myLatLng) ;
    };
}());

答案 2 :(得分:0)

假设createMap返回地图

var map = null;

function onSuccess(position, arrMyLatLng) {
    var latitude = position.coords.latitude ;
    var longitude = position.coords.longitude;
    var myLatLng = new google.maps.LatLng(latitude, longitude);

    map = map || createMap(myLatLng, arrMyLatLng);
    map.panTo(myLatLng);
}

createMap仅在map评估为“false”(即null)时运行,因此createMap仅运行一次。