同时调用两个函数的问题

时间:2012-03-02 05:39:50

标签: javascript

当我调用一个调用另一个函数的函数时,我遇到了问题,这个函数一直在回调,直到拼图解决或找不到任何动作。

问题是我需要调用一个函数两次,但值不同。

我尝试存储这些值,但是当我调用第二个函数wchich回调时,它会覆盖这些值。

最重要的代码片段在这里:

function splitways(){
    var strsp,aa=dir,bb=xy;
    if(nextRock()){
        if(xy!=start){
            strsp=(aa+""+bb+""+dir+""+xy)*1;
            if(!(strsp in arr)){
                arr[strsp]=strsp;
                caller(dir,xy);
            }
        }else{
            count++;
        }
    }
}

function caller(num,pos){
    var aa=num,bb=pos;
    splitways();
    //--
    dir=aa;
    xy=bb;
    //--
    dir==1?dir=4:dir--;
    splitways();
}

注意,splitways()更改了dirxy的值,这就是为什么我尝试将其更改回来然后在第二次调用splitways()之前修改它们的原因。但是在第一次通话时,一切都被删除了。

我尽我所能尝试了2个小时......我最好的镜头是将它们缓存在var aa=num,bb=pos;上,但这不起作用。

赞赏任何想法

1 个答案:

答案 0 :(得分:1)

虽然我不完全确定你要对你的代码做什么,但我认为你的一些逻辑混淆了:

在第一次调用时(我假设你先调用splitways()),你设置“aa = dir”(我们只注意这个)。当“caller()”时,显然需要全局变量“dir”。现在,在“caller()”中,设置“aa = num”,转换为“aa = dir”。你再次调用splitways,然后做同样的事情:“aa = dir”。这种情况持续不断(AKA:直到调用者()停止被调用)。但是,当它返回执行堆栈时,您在“caller()”中有“dir = aa”。现在,你已经做了“aa = num”,所以“dir = aa”绝对没有任何意义,因为你还没有在任何已执行的地方改变“dir”的值。

最终,LATEST“caller()”调用将执行“dir == 1?dir = 4:dir--”行,但是当该函数完成并且执行返回到SECOND TO LAST“caller()”时“调用,它重置”dir = aa“,所以dir实际上永远不会改变,直到最后一次调用(发生的第一次”调用者()“执行)。

如果这完全没有意义,那很好。必须有更好的方法让你做你想做的事情。也许我可以帮忙吗?