Hi Joe,
Sure, I'd be happy to clarify.
Because the render function may be invoked multiple times, we don't want to just use .append(), because that would add more and more DOM elements over time. Also, we don't want to just use .enter().append(), because setting attributes on the element appended there would only take effect on the initial render. In the resize example, .merge is being used to merge together the enter and update selections. That way, whatever attributes get set on the merged selection will take effect BOTH for the initial invocation (where .enter() comes into play) AND for subsequent invocations (where .enter() is empty).
I've created a collection of examples for teaching the General Update Pattern:
https://curran.github.io/d3-in-motion/#1/5/1 . You can step through these using CTRL+ARROW (or CTRL+SHIFT+ARROW for Mac users). The difference between the following two examples shows why .merge exists:
Best regards,
Curran