遞迴迴圈
尾呼叫優化可以安全地實現遞迴迴圈,而無需考慮呼叫堆疊溢位或增長的幀堆疊的開銷。
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