1.尾调用是什么
尾调用指某个函数的最后一步是调用另一个函数。
错误例子:
function a(x) {
return b(x) + 1
}
function a(x) {
let b = b(x)
return b
}
1.递归优化
例:
function num(n) {
if (n === 1) return 1;
return n * num(n - 1);
}
num(5) // 120
function num(n, total) {
if (n === 1) return total;
return num(n - 1, n * total);
}
num(5, 1) // 120
说明:
同样是阶乘,且达到的结果都一样,但是在计算过程中第一个例子保存了5次调用记录,很容易发生"栈溢出"错误,而第二个例子只保存了1次,永远不会发生"栈溢出"错误。
现在es6也明确规定,必须部署"尾调用优化"。