12.19 js中递归优化(递归爆栈)

es6增加了尾调用优化,但是目前支持的浏览器或者js引擎只有苹果的safari和名为Duktape的嵌入式JavaScript引擎。

  • 未启用尾调用优化,递归爆栈
  <script>
            //递归
            function fn(n) {
                if (n < 1) {
                    return
                }
                console.log(n);
                fn(n - 1)
            }

            fn(100000)
    </script>

  • 启用尾调用优化
    <script>
            //启用递归尾部调用优化
            function fn(n) {
                if (n < 1) {
                    return
                }
                console.log(n);
                return fn(n - 1)
                //return fn(n - 1)会被编译器改成goto count(n-1),
                //在不创建新栈的情况下重复执行该函数
            }
            fn(100000)
    </script>
posted @ 2020-12-19 20:15  17135131xjt  阅读(363)  评论(0编辑  收藏  举报