I like this explanation a lot, however, I got a bit lost with all the refactoring.
Andre Lewis

Depends on what you want to support, and if you are using something like Ramda or not. I think the ES6 version is pretty easy and flexible:

It won’t flatten nested arrays of arguments, but most people won’t need those, and could be handled via function composition instead.