定义
函数的最后一步操作调用另一个函数
function f(x) {return g(x)}// 以下不算尾调用1) 赋值操作function f(x) {let y = g(x)return y}2) 调用函数后,还有其它操作function f(x) {return g(x) + 1}3) 最后一步隐性调用 return undefindfunction f(x) {g(x)}
实质
只保留内层函数的调用帧,不保留外层函数的调用帧,节省内存
注意
只有不需要用到外层函数的内部变量,才能取消外层函数的调用帧,否则不能进行尾调用优化。
function addOne(a) {var one = 1;function inner(b) {return b + one}return inner(a)}
不会进行尾调用优化,应为内层函数inner 用到了外层函数addOne 内部的变量one.
