I really enjoyed this lesson, though I would like to suggest that in your example for the reduce function you should re-name the parameter start to something like startTotal or startValue. The reason why is that the first time I read the example I had assumed start was a starting index of the passed array.
IE: reduce = (f, startingIndex, array) =>
for( i = startingIndex; i < array.length; i++)
I know that this isn’t how you structured the example function, and a good counter argument is simply, “well, you need to learn how to read code”, and I get that. But as someone who is so used to reading code day in and day out, it is hard to not assume a parameter’s implied intent or meaning simply from its name.
Otherwise, I’ve loved this series so far and I love how you explain everything simply, yet thoroughly. If ever I don’t understand a concept immediately (like currying, for example), just by re-reading the lesson and the example code I can figure it out, and I really appreciate that!