递归循环
尾调用优化可以安全地实现递归循环,而无需考虑调用堆栈溢出或增长的帧堆栈的开销。
function indexOf(array, predicate, i = 0) {
if (0 <= i && i < array.length) {
if (predicate(array[i])) { return i; }
return indexOf(array, predicate, i + 1); // the tail call
}
}
indexOf([1,2,3,4,5,6,7], x => x === 5); // returns index of 5 which is 4