js调用自身次数过多就会出现栈溢出现象。比如:function fac(n) { if (n === 1) return 1; return n * fac(n - 1);} fac(5) // 120 尾递归永远只有一个调用记录,因为它将当前函数的计算结果作为参数传递给自身调用,这样函数调用产生的调用记录就消失了,就不会溢出。比如:function fac(n, total) { if (n === 1) return total; return fac(n - 1, n * total);}//执行过程如下fac(5,1) fac(4,5) fac(3,20) fac(2,60) ...