javascript中递归编程变量的问题

时间:2016-09-04 17:51:30

标签: javascript debugging recursion

我玩了一些递归编程。我有一个变量来跟踪我的深度(d)。控制台日志可供我查看该程序目前的位置。



var Test = function(){
	this.rekursiv = function(d){
		this.d = d;
		console.log("case 1 granted, d: " + this.d);		
		if( this.d < 3)	{
		console.log("going deeper..");
		this.rekursiv(this.d + 1);
		console.log("going back..");		
		}
		console.log("d: " + this.d  );
		}
}	
t = new Test();
t.rekursiv(0);
&#13;
&#13;
&#13;

这是我的问题: 每当我深入一级时,我都会通过&#34; this.d + 1&#34;更上一层楼。 然而,调试代码(使用console.log)表明d不会在一个级别/深度上进行更改,而是在每个级别/深度进行更改。

为什么会这样?我怎样才能阻止代码执行此操作?

2 个答案:

答案 0 :(得分:3)

为什么不使用局部变量d

使用this.d,您要设置Test实例的属性。使用rekursiv的结尾,您不会将值更改回以前的值。

&#13;
&#13;
var Test = function () {
        this.rekursiv = function(d) {
            console.log("case 1 granted, d: " + d);
            if (d < 3) {
                console.log("going deeper..");
                this.rekursiv(d + 1);
                console.log("going back..");		
            }
            console.log("d: " + d  );
        }
    },
    t = new Test;

t.rekursiv(0);
&#13;
&#13;
&#13;

另一个解决方案是,在函数this.d的开头增加rekursiv并在结束时减少它。

&#13;
&#13;
var Test = function () {
        this.d = 0;
        this.rekursiv = function() {
            this.d++;
            console.log("case 1 granted, d: " + this.d);		
            if (this.d < 3)	{
                console.log("going deeper..");
                this.rekursiv();
                console.log("going back..");		
            }
            console.log("d: " + this.d  );
            this.d--;
        }
    },
    t = new Test;

    t.rekursiv();
&#13;
&#13;
&#13;

答案 1 :(得分:2)

删除此行:

this.d = d;

现在,d是局部变量而不再是实例变量。

&#13;
&#13;
var Test = function(){
  this.rekursiv = function(d){
    console.log("case 1 granted, d: " + d);
    if( d < 3)	{
      console.log("going deeper..");
      this.rekursiv(d + 1);
      console.log("going back..");
    }
    console.log("d: " + d  );
  }
}
t = new Test();
t.rekursiv(0);
&#13;
&#13;
&#13;