调用堆栈增加javascript

调用堆栈增加javascript,javascript,callstack,Javascript,Callstack,我已经写了一个21点脚本,我想递归迭代,直到一个相当大的资金用完。我想对遥测数据进行分析。它是一个本地脚本,除了运行它的浏览器环境之外,不会对任何东西造成危险 本质上,脚本应该是递归的,直到现金用完为止。它可以在大约5k左右的分手操作中正常工作——对于10k以下的银行存款,然后抛出max call stack错误。然而,我需要更多的数据;比如超过10万只手 我一直在寻找解决方案,我想这是一个特定于浏览器的问题。任何想法都将不胜感激 附加代码段: function main() { init();

我已经写了一个21点脚本,我想递归迭代,直到一个相当大的资金用完。我想对遥测数据进行分析。它是一个本地脚本,除了运行它的浏览器环境之外,不会对任何东西造成危险

本质上,脚本应该是递归的,直到现金用完为止。它可以在大约5k左右的分手操作中正常工作——对于10k以下的银行存款,然后抛出max call stack错误。然而,我需要更多的数据;比如超过10万只手

我一直在寻找解决方案,我想这是一个特定于浏览器的问题。任何想法都将不胜感激

附加代码段:

function main() {
init();
if (bankRoll >= initialBet) {
    determineBet();
}
else {
    alert("Not enough moneyz to play!");
    console.log("telemetry");
    exitFunction();
}
bankRoll -= initialBet;
playTheGame(); // the whole game, betting, receiving cards, strategy etc
}

我建议您使用循环:

function main() {
    init();
    while (bankRoll >= initialBet) {
        determineBet();
        bankRoll -= initialBet;
        playTheGame(); // the whole game, betting, receiving cards, strategy etc
    }
    alert("Not enough moneyz to play!");
    console.log("telemetry");
    exitFunction();
}

很难说我是否正确重构了它,因为我不知道像
playTheGame
determinatebet
这样的函数有什么作用,但我希望你能理解。

我建议你使用循环:

function main() {
    init();
    while (bankRoll >= initialBet) {
        determineBet();
        bankRoll -= initialBet;
        playTheGame(); // the whole game, betting, receiving cards, strategy etc
    }
    alert("Not enough moneyz to play!");
    console.log("telemetry");
    exitFunction();
}

很难说我是否正确地重构了它,因为我不知道像
playTheGame
determinitebet
这样的函数有什么作用,但我希望你能理解。

它必须是递归的吗?也许你可以重写它来使用堆栈。你能发布一个具有递归逻辑的代码片段吗?@FelixKling不错的主意;我不知道该怎么做,因为我上周才开始编程。首先编写了游戏,然后决定用它来测试基本的bj策略。你能发布你得到的错误吗?@Jacob Amerz:“超过了最大调用堆栈大小”它必须是递归的吗?也许你可以重写它来使用堆栈。你能发布一个具有递归逻辑的代码片段吗?@FelixKling不错的主意;我不知道该怎么做,因为我上周才开始编程。首先编写了游戏,然后决定用它来测试基本的bj策略。你能发布你得到的错误吗?@Jacob Amerz:“超过了最大调用堆栈大小”这会在大约相同的手数(>5k)下返回相同的错误。playTheGame()函数包含了大部分函数,虽然没有那么复杂,但我想我可能还有很多关于高效编码的知识需要学习。那么,
main
函数在何时何地被调用?它在html脚本元素中被调用,并在控制手动完成后重新启动游戏的函数中被调用。该函数依次由确定结果的求值函数调用。好的,目标应该是将所有内容都放在while循环中。处理和评估的完整逻辑应该在这里,这样您就不需要递归调用
main
函数,而只需在启动时调用它一次。谢谢!我从循环函数中删除了main()函数调用,现在它不再给我带来任何麻烦了!少就是多…这会在手的大小相同(>5k)时返回相同的错误。playTheGame()函数包含了大部分函数,虽然没有那么复杂,但我想我可能还有很多关于高效编码的知识需要学习。那么,
main
函数在何时何地被调用?它在html脚本元素中被调用,并在控制手动完成后重新启动游戏的函数中被调用。该函数依次由确定结果的求值函数调用。好的,目标应该是将所有内容都放在while循环中。处理和评估的完整逻辑应该在这里,这样您就不需要递归调用
main
函数,而只需在启动时调用它一次。谢谢!我从循环函数中删除了main()函数调用,现在它不再给我带来任何麻烦了!少当然是多。。。