Javascript 将参数向下传递到嵌套函数Google Maps v3

Javascript 将参数向下传递到嵌套函数Google Maps v3,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,很抱歉这里有个新问题,但我对javascript还是新手。理想情况下,我想调用myLoop(latLong);但是,除非我将变量设置在函数之外,否则我似乎无法让.setPosition()识别该变量 var x = 0; var y = 0; var z = 0; var v = 0; function xy(a,b,c,d) { var longDistance = Math.abs(a-d); var longTime

很抱歉这里有个新问题,但我对javascript还是新手。理想情况下,我想调用myLoop(latLong);但是,除非我将变量设置在函数之外,否则我似乎无法让.setPosition()识别该变量

    var x = 0;
    var y = 0;
    var z = 0;
    var v = 0;

    function xy(a,b,c,d) {
        var longDistance = Math.abs(a-d);
        var longTime = longDistance/0.1*0.5;            
        var latDistance = b-c;
        var latRate = latDistance/longTime*0.5;
        x = a; //origin long
        y = b; //oringin lat
        z = latRate;
        w = d; //destination long
        v = c; //destination lat
    }

    function myLoop () {        
        setTimeout(function () {
            var latLong = new google.maps.LatLng(y,x);
            marker.setPosition(latLong); 
            x = x + 0.1;
            y = y - z;
            if (x < w && y < v) { 
                myLoop();
            } else {

                alert('finished');

            }
        }, 0.5)
    }

    xy(-118,33,40,-73);
    myLoop();
var x=0;
var y=0;
var z=0;
var v=0;
函数xy(a,b,c,d){
var longDistance=数学绝对值(a-d);
var longTime=长距离/0.1*0.5;
var latDistance=b-c;
var latRate=latDistance/longTime*0.5;
x=a;//原点长
y=b;//原纬度
z=板条率;
w=d;//目标长
v=c;//目标lat
}
函数myLoop(){
setTimeout(函数(){
var latLong=new google.maps.LatLng(y,x);
标记器设置位置(拉长);
x=x+0.1;
y=y-z;
如果(x
只需将
latLong
变量递归地传递到
myLoop()
函数中即可。 为此,您可以在函数外创建第一个latLong变量,然后调用函数(传入第一个latLong变量),然后在latLong函数内检查条件,如果需要再次调用myLoop函数,请更新latLong变量,然后再次调用myLoop函数

下面是递归代码的外观:

var x = 0;
var y = 0;
var z = 0;
var v = 0;

// Your first latLong
var latLong = new google.maps.LatLng(y,x);

function xy(a,b,c,d) {
    // ...
}

// Pass in the latLong variable
function myLoop (latLong) {        
        setTimeout(function () {
            marker.setPosition(latLong); 
            x = x + 0.1;
            y = y - z;
            if (x < w && y < v) { 
                
                // now create a new latLong, and pass it 
                // back into this function recursively
                latLong = new google.maps.LatLng(y,x);
                myLoop(latLong);

            } else {
                alert('finished');
            }
        }, 0.5)
    }

xy(-118,33,40,-73);

// Now call the myLoop function to get the recursion started
myLoop(latLong);
这种结构为您提供了一种封装所有计算逻辑的干净方法,同时也为您提供了一个漂亮、干净的入口点。使用此新重构,您可以从一行代码开始循环:

latLongGenerator.startLoopWith(-118,33,40,-73); 
我还没有测试过这段代码,但它应该可以帮助您走上正确的道路


希望这有帮助

我知道我的问题听起来很糟糕,因为这是最明显的答案,但它不起作用。理想情况下,我不需要函数外的x,y,z,v变量。。。我希望函数能够接受所有参数,这样我就只有myLoop函数了。ok@user1724492,看看我更新的答案是否有用。我添加了一个新的选择。没问题!很乐意帮忙!
latLongGenerator.startLoopWith(-118,33,40,-73);