我是一个绝对的小伙子,他几乎没有开始学习JS,仍然在研究如何使用函数。这是我刚刚开始研究的第一个项目(闲置游戏)的一部分:
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(这应该改变)并没有改变。我做错了什么?关于如何使用功能,我完全不合适吗?
编辑:删除了两个返回函数。
答案 0 :(得分:0)
好的,首先,一旦你打电话给“返回”,功能就完成了。 “返回...”之后的所有内容都不会被执行,因此最后的两个返回语句没有任何意义。下一个大问题是,您正在调用返回某些内容的函数,但您没有保存结果。 您必须将函数分配给变量,因此实际保存的是返回的值。
解决此问题的一种方法是返回数组/列表:
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);
答案 1 :(得分:-3)
好的......所以首先你需要摆脱那个switch子句,它是错误的使用它,你应该使用if-elseif-else结构:
if(Lvl >= 15){
...
}
else if(Lvl >= 6){
...
}
else{
...
}
这样做,您可以更好地了解每个upgradeCost的条件,并且它将根据级别执行一个代码块,就像您的swtich一样。
除此之外,问题是当执行return时,函数将其输出提供给主程序,因此第二次返回将不会被执行,所以你应该返回一个数组。
return[needed,upgradeCost];
不要忘记使用camelCase(如果你有两个或两个以上的单词作为变量名开始所有这些,除非第一个带有大写字母),就像我刚才那样,它会给你的代码方式更清晰。
祝那场比赛好运!