我玩了一些递归编程。我有一个变量来跟踪我的深度(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;
这是我的问题: 每当我深入一级时,我都会通过&#34; this.d + 1&#34;更上一层楼。 然而,调试代码(使用console.log)表明d不会在一个级别/深度上进行更改,而是在每个级别/深度进行更改。
为什么会这样?我怎样才能阻止代码执行此操作?
答案 0 :(得分:3)
为什么不使用局部变量d
?
使用this.d
,您要设置Test
实例的属性。使用rekursiv
的结尾,您不会将值更改回以前的值。
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;
另一个解决方案是,在函数this.d
的开头增加rekursiv
并在结束时减少它。
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;
答案 1 :(得分:2)
删除此行:
this.d = d;
现在,d是局部变量而不再是实例变量。
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;