Chapter 4, Behaving Properly – Pure Functions
4.1 Must return? If a pure function doesn’t return anything, it means that the function doesn’t do anything since it can’t modify its inputs and doesn’t have any other side effect.
4.2 Well-specified return: TypeScript would have objected because the result of the function would be string | undefined, because the .pop() method returns undefined if the input array is empty.
4.3 Go for a closure: We just have to wrap the definition of fib2() in an IIFE; fibC() is equivalent to fib2() but with an internal cache:
// question_04_go_for_a_closure.ts
const fibC = (() => {
  const cache: number[] = [];
  const fib2 = (n: number): number => {
    if (cache[n] === undefined) {
      if (n === 0) {
        cache[0] = 0;
      } else if (n === 1) {
  ...