Fibonacci using cache
Something I noticed in your algorithm is that despite using memoization, you are still reassigning the Fibonnacci number into the array every time you calculate it. 

You could avoid reassigning by having a function like computeIfAbsent that determines if the Fibonacci for a given n has already been calculated, and if not, use the Fibonacci function to calculate it and put it into the array, but only this time.

Also, we could avoid having to calculate the first two Fibonaccis by having them memoized from the start, and make the code fail for any index n smaller than 0.

memo = [0,1]

computeIfAbsent = (n, f) -&gt;
    fib = memo[n]
    if typeof fib is 'undefined'
        fib = f(n)
        memo[n] = fib
    fib

fibonacci = (x) -&gt;
    if x &lt; 0 
        throw Error("Invalid index: " + x)
    computeIfAbsent(x, (n) -&gt; fibonacci(n-1) +  fibonacci(n-2))

console.log("#{i}: #{fibonacci(i)}") for i in [0..79]


Still, you must be aware that this code will not detect arithmetic overflows. It might look like it is calculating it right, but in fact, the calculations could be wrong due to overflow. I think your version and mine start to produce invalid results around 79.

You can check using a Fibonacci Calculator