Javascript 如何修复此功能?

Javascript 如何修复此功能?,javascript,Javascript,我是个彻头彻尾的noob,刚刚开始学习JS,还在研究如何使用函数。这是我刚开始从事的第一个项目(空闲游戏)的一部分: function WneededDetermine(Lvl, needed, upgradecost, neededArr, costsArr, mainPower, secondaryPower, multi, lowerMainPower, lowerSecondaryPower, lowerMulti){ switch (true) { case

我是个彻头彻尾的noob,刚刚开始学习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的值(本应更改)没有更改。我做错了什么?关于如何使用函数,我是否完全偏离了标准


编辑:删除了两个返回函数。

好的,首先,一旦调用“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个“返回”?从理论上讲,它应该是可行的,以下是一个简化的工作版本: