递归函数中的范围?

时间:2016-03-10 21:37:13

标签: javascript variables recursion scope

为清晰起见编辑:

该代码旨在记住它在有效属性中的位置,并且存在有限数量的可能路径。

例如,在4x4网格中:从(1,1)开始,那么你可以去N,S,E或W吗? N(即(1,2))是新的开始。从(1,2):N?没有E?是。从(2,2)开始。继续,直到探索完所有可能的路径。



function getTestSubjects(current){
	//returns an array unique to current
}
var successes = [];
var currentPath = [];

function nextStep(current){
	currentPath.push(current);
    current.valid = false;
	if (currentPath.length === desiredLength){
		successes.push(currentPath);

		//line X
		return
	}
	var testSubjects = getTestSubjects(current);
	for(i=0;i<testSubjects.length;i++){
    	if(testSubjects[i].valid === true){
           nextStep(testSubjects[i])
        }
    }
}
&#13;
&#13;
&#13;

我的问题涉及递归函数中变量的局部性。 每次调用nextStep()时,都会创建一个唯一的局部变量testSubjects, 或者相同的变量(nextStep()的第一次调用的本地变量)是否会改变它的含义?

当for循环到达testSubjects [i] .valid === false的点时,它会返回到nextStep的上一次调用并继续循环吗?

另外,如果在lineX,我写currentPath = []来清除路径并继续搜索其他成功路径,它会影响已经推送到成功数组的currentPath吗?

我希望这是有道理的。我还是个程序员。请询问您是否需要提前澄清并提前致谢!

1 个答案:

答案 0 :(得分:0)

是的,每次都会生成一个唯一的局部变量。 是的,它将返回并继续for循环。

我认为在找到成功的道路后继续搜索是明智的。取决于你创建的独特数组..似乎你可以有一个无限循环?

你的独特阵列越来越小了吗?