如何在 javascript 中调用调用超过 50k 次的递归函数?

how can I call a recursive function that calls more than 50k times in javascript?


我知道浏览器 Javascript 堆栈大小限制,但有什么办法可以打破它吗?当我在网上阅读 Javascript Stack size limit 时,我找不到克服浏览器堆栈大小限制的方法。在 java-script 或 angular.

中有什么技巧可以做到吗

例如

var i=0;
rec(para);
function rec(para){
          if(para>=50000){

          }
          else{
            $scope.items.push(i);
            rec(i++)
          }

    }

是否可以将 50000 个数据添加到一个数组中..

使用异步方式

function func1(n, callback)
{
   //do some work

   //check for exit condition
   if (n == 1)
   {
     callback();// invoke callback handler and pass the results to it.
   }
   else
   {
      setTimeout(function(){
         func1(); //call it again with modified parameters
      });
   }
}

一个缺点是您将无法再return此方法的值。

is it possible to add 50000 data into an array..

是的,通过迭代。在你的情况下,你只需要做

function rec()
{
  for( var counter = 0; counter < 50000; counter++ )
  { 
    $scope.items.push(counter);
  }
}

如果您的环境允许,请尝试坚持使用本机 ES5/6 方法。您可以使用 fillmap 一步将巨大的连续数字序列添加到数组中:

// assuming $scope.items is already initialized array
$scope.items = $scope.items.concat((Array(50000).fill(0).map(function(e,i){return i})));

http://www.2ality.com/2013/11/initializing-arrays.html, Array.fill, Array.map.