Javascript 如何修复此功能?
我是个彻头彻尾的noob,刚刚开始学习JS,还在研究如何使用函数。这是我刚开始从事的第一个项目(空闲游戏)的一部分:Javascript 如何修复此功能?,javascript,Javascript,我是个彻头彻尾的noob,刚刚开始学习JS,还在研究如何使用函数。这是我刚开始从事的第一个项目(空闲游戏)的一部分: function WneededDetermine(Lvl, needed, upgradecost, neededArr, costsArr, mainPower, secondaryPower, multi, lowerMainPower, lowerSecondaryPower, lowerMulti){ switch (true) { case
function WneededDetermine(Lvl, needed, upgradecost, neededArr, costsArr, mainPower, secondaryPower, multi, lowerMainPower, lowerSecondaryPower, lowerMulti){
switch (true) {
case Lvl >= 15:
needed = 250 * (Lvl - 10);
upgradecost = costsArr[6]*Math.pow(mainPower, Lvl - 14) + multi*(secondaryPower, Lvl - 15);
break;
case Lvl >= 6:
needed = 100 * (Lvl - 4);
upgradecost = (costsArr[5]*Math.pow(lowerPower, Lvl - 5) + lowerMulti*Math.pow(lowerSecondaryPower, Lvl - 6)).toExponential(3);
break;
default:
needed = neededArr[WLvl];
upgradecost = costsArr[WLvl];
break;
return needed;
};
};
然后
setInterval(function(){
var Wneeded = WneededDetermine(WLvl, Wneeded, Wupgradecost, WupgradeLvlarr, Wupgradecosts, 30, 35, 5e13, 8, 12, 100000);
}, 10);
但是,Wneeded和Wupgradecost的值(本应更改)没有更改。我做错了什么?关于如何使用函数,我是否完全偏离了标准
编辑:删除了两个返回函数。好的,首先,一旦调用“return”,函数就完成了。“return…”之后的所有内容都不会执行,因此结尾的两个return语句没有任何意义。下一个大问题是,您正在调用返回某些内容的函数,但您没有保存结果。 必须将函数分配给变量,以便实际保存返回的值 解决此问题的一种方法是返回数组/列表:
return [needed, upgradecost];
这样你只会回来一次。现在必须保存数组中的值:
setInterval(function(){
var returnData = WneededDetermine(WLvl, Wneeded, Wupgradecost, WupgradeLvlarr, Wupgradecosts, 30, 35, 5e13, 8, 12, 100000);
needed = returnData[0];
upgradecost = returnData[1];
}, 10);
好的…首先你需要去掉switch子句,它是一个错误的用法,你应该使用if-elseif-else结构:
if(Lvl >= 15){
...
}
else if(Lvl >= 6){
...
}
else{
...
}
这样做,您可以更好地了解每个升级成本的条件,并且它将根据级别只执行一个代码块,就像您的swtich一样
除此之外,问题是当执行return时,函数将其输出提供给主程序,因此第二个return将不会执行,因此您应该返回一个数组
return[needed,upgradeCost];
别忘了用camelCase(当你有两个或两个以上的单词作为变量名时,除非第一个单词用大写字母开头)作为你的变量,就像我刚才做的那样,它会让你的代码更加清晰
祝你比赛好运 不能返回2个值,也不能更改变量。这将如何更改这些值?您的函数试图返回两个不同的东西,这毫无意义,而调用该函数的代码对返回的值没有任何作用。在Javascript中,参数不是通过引用传递的。您最近的编辑返回该函数中未定义的
Wneeded
,开关没有问题。说明了如何评估它,以及在问题中使用它的方式是完全有效的。更重要的是,同一文档页提供了一个与此处使用的示例类似的示例。@axiac您完全正确,它是switch子句的有效用法,但这并不意味着它应该这样使用,就像您可以通过中断来完成while循环一样,但您不应该这样做。开关用于检查表达式可能具有的特定值,而不是其他变量(不包含在表达式中)具有的条件。谢谢!但是当我把它放进去的时候,它表明returnData是未定义的,所以我无法得到值。你确定你把return语句放在了正确的位置吗?而这次只有1个“返回”?从理论上讲,它应该是可行的,以下是一个简化的工作版本: