2.1. No extra variables: Our functional implementation required using an extra variable, done, to mark whether the function had already been called. Not that it matters, but could you make do without using any extra variables? Note that we aren't telling you not to use any variables, it's just a matter of not adding any new ones, such as done, and only as an exercise!
2.2. Alternating functions: In the spirit of our onceAndAfter() function, could you write an alternator() higher-order function that gets two functions as arguments and on each call, alternatively calls one and another? The expected behavior should be as in the following example:
let sayA = () => console.log("A");
let sayB = () => console.log("B");
let alt = alternator(sayA, sayB);
alt(); // A
alt(); // B
alt(); // A
alt(); // B
alt(); // A
alt(); // B
2.3. Everything...