当我调用一个调用另一个函数的函数时,我遇到了问题,这个函数一直在回调,直到拼图解决或找不到任何动作。
问题是我需要调用一个函数两次,但值不同。
我尝试存储这些值,但是当我调用第二个函数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()
更改了dir
和xy
的值,这就是为什么我尝试将其更改回来然后在第二次调用splitways()
之前修改它们的原因。但是在第一次通话时,一切都被删除了。
我尽我所能尝试了2个小时......我最好的镜头是将它们缓存在var aa=num,bb=pos;
上,但这不起作用。
赞赏任何想法
答案 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实际上永远不会改变,直到最后一次调用(发生的第一次”调用者()“执行)。
如果这完全没有意义,那很好。必须有更好的方法让你做你想做的事情。也许我可以帮忙吗?