Zachary Collier
Feb 24, 2017 · 1 min read

Thanks for this article Eric — it led to some worthwhile (albeit sobering) realizations about my understanding of closures.

While I was playing around with this material, I refactored your partialApply() example on my own to use only spread operators, without the need for .apply():

function partialApply(fn, ...fixedArgs) {
return (...remainingArgs) => fn(...fixedArgs, ...remainingArgs)
}

Looking at it this way made me wonder— would I have similar results without the spread operator? My understanding of the scope chain led me to assert that the innermost function already has a this context in common with its outer lexical environment.

function partialApply(fn, fixedArgs) {
return (remainingArgs) => fn(fixedArgs, remainingArgs)
}

Indeed, this partial application still works without a spread operator. I cloned your bin to try running the tests, and sure enough they come back OK: http://jsbin.com/votiwet/edit

My question for you , then — if both cases produce the same result, what nuance does calling apply() or using provide for us that the ‘plain’ implementation does not?

    Zachary Collier

    Written by