当模式 随机时,我获得递归Switch语句的undefined
值。这个想法是最随机的id,它会随机选择一个数字并设置新模式并返回原始的switch语句。
当模式不是随机时,Everthing工作正常。所以我不确定这里有什么问题。
变量a
是模式,而i,j
只是数字。
switchMode: function (i, j, a){
var b;
console.log(a);
switch(a) {
default:
case 'add':
console.log(i, j);
b = i + j;
break;
case 'minus':
console.log(i, j);
b = i - j; //negative numbers possible
break;
case 'multiply':
console.log(i, j);
b = i * j; //0 possible
break;
case 'random':
this.randomSwitchMode(i, j);
break; //random
}
return b;
},
randomSwitchMode: function(i, j) {
var c = Math.ceil(Math.random() * 3);
console.log(i, j, c);
switch(c) {
default:
case 1:
var a = 'add';
console.log(a);
this.switchMode(i, j, a);
break;
case 2:
var a = 'minus';
console.log(a);
this.switchMode(i, j, a);
break;
case 3:
var a = 'multiply';
console.log(a);
this.switchMode(i, j, a);
break;
}
}
答案 0 :(得分:2)
你没有从“randomSwitchMode”返回任何内容。即使你这样做,你也必须确保在“switchMode”中将其返回值分配给“b”。
因此,随机案例应如下:
case 1:
var a = 'add';
console.log(a);
return this.switchMode(i, j, a);
然后在“switchMode”中:
case 'random':
b = this.randomSwitchMode(i, j);
break; //random
既然你要解决所有这些麻烦,我提出的建议是,不要使用switch
语句,而是保留一个将操作名称映射到函数的对象:
switchMode: function (i, j, a) {
var ops = {
'add': function(i, j) { return i + j; },
'minus': function(i, j) { return i - j; },
'multiply': function(i, j) { return i * j; },
'random': function(i, j) {
return ops[['add', 'minus', 'multiply'][Math.floor(Math.random() * 3)]](i, j);
}
};
return ops[a](i, j);
}
您可以将“随机”案例拆分出来并以不同的方式处理它。总的来说,虽然switch
语句没有任何内在错误,但基于数据结构的实现将更加灵活。