In this fiddle, you can see that the DOM was actually updated with “B” correctly, but the page wasn’t repainted yet:
this is because the the dom patching by Vue is done in a microtask on the same callstack, and the nexttick pushed another task on that microtask queue - which will also run before the browser can actually do a re-paint after the current callstack has finished.
setTimeout() with a couple ms delay on the other hand creates a macro task, pushing execution to the next callstack and gives the browser a brief window of time to do the repaint.
https://jsfiddle.net/Linusborg/n9jmu5v7/24101/ (using 60ms here)
setImmediate() has the same effect, but has to be polyfilled in IE if I recall correctly?
That’s as far as I myself understand it. the event loop & callstack are a fickle beast.