繁体   English   中英

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

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


我知道浏览器 Javascript 堆栈大小限制,但有什么办法可以打破它? 当我在网上阅读Javascript 堆栈大小限制时,我找不到克服浏览器堆栈大小限制的方法。 是否有任何技巧可以在 java-script 或 angular.js 中做到这一点。

例如

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
      });
   }
}

一个缺点是您将无法再从此方法返回值。

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

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

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 _

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM