美文网首页
2018-01-26 js尾调用

2018-01-26 js尾调用

作者: __Seve | 来源:发表于2018-01-26 17:43 被阅读0次

    1.在js中使用递归的时候,有可能会栈溢出,因为浏览器调用栈有上限限制,具体可以用以下代码测出当前浏览器所能用的最大栈的数量

    var i = 0;
    function recursiveFn () {
              i++;
              recursiveFn();
    }
    
    try {
            recursiveFn(); 4
    } catch (ex) {
          alert('i = ' + i + ' error: ' + ex);
    }
    

    2.但是当我们确实有需要用到递归的时候有没有更好的解决办法呢,其实是有的,es6中的一个特性-尾递归就可以很好的解决这个问题,

    原理

    • 常规递归中,我们是保存整个调用栈,比如A函数里面调用了B函数,B函数又调用了C函数,那么现在调用栈就会是 |C|B|A C,B依次执行完之后才能返回A的值,
    • 而尾递归中,我们是复用栈的,比如执行C,B这段之后,执行完C后就会销毁C的内容,B里保存C刚才执行完的值,那么流程就是,先C|B,这样执行后,变成B|A,我们用有限的栈空间完成了递归过程

    相关文章

      网友评论

          本文标题:2018-01-26 js尾调用

          本文链接:https://www.haomeiwen.com/subject/raywaxtx.html