如何修复此功能?

时间:2017-11-02 11:48:24

标签: javascript

我是一个绝对的小伙子,他几乎没有开始学习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(这应该改变)并没有改变。我做错了什么?关于如何使用功能,我完全不合适吗?

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

2 个答案:

答案 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(如果你有两个或两个以上的单词作为变量名开始所有这些,除非第一个带有大写字母),就像我刚才那样,它会给你的代码方式更清晰。

祝那场比赛好运!