Even this doesn't quite describe the servo code's activities, quite.
The OP may choose to ignore this, if the technical details cause eye-glaze.
I'm posting this only because I just rewrote Servo.h/Servo.cpp for my own purposes; I wanted more servos, and wanted to synchronize a pixel update with the end of the servo update; understanding the servo code was necessary before changing it (successfully).
Servo.write(angle) actually only dumps the value into a holding variable. Your first Servo.attach() actually initiates the underlying timer interrupt cycle that causes the generation of the pulses on any pins that have been attached.
Using the Uno as our platform(so we know exactly what form Servo.cpp/Servo.h, etc. will create), you can configure 12 servos. Servo.h declares maximum pulse width as 2400 us.
Each time the interrupt triggers, a pulse is terminated and a new pulse initiated, cycling through all 12 possible outputs. At the end, a residual timer value is written if the 20 ms update cycle time has not been exhausted. Since 12 servo ouputs can be configured, and the max pulse width is 2400 us, it is possible for a complete cycle to take 28.8 ms. The minimum cycle time will be 20 ms, because at the end of updating all the servo pulses, the timer is loaded with a residual value to consume the rest of the 20 ms.
So, if you happen to write a value to servo 1 an instant after it's interrupt event has been configured, it could take up to 28.8 ms before your change is actually applied to the Servo output. But "delay()" per se does not factor in to that delay, it's just due to the nature of the interrupt cycle.
Obviously, if you only configure one servo, the timing changes, BUT, be aware. The interrupt cycle is configured to honor the 20 ms update rate, even for just one servo. So, when you call Servo.write() to apply a new value to your pulse width, if the interrupt cycle was just in the middle of updating your servo, the pulse width will not change for 20 ms, the next time the cycle thinks it should update your output.
If you're sleuthing with an oscilloscope, and trying to figure out why there's an unpredictable delay between something else your code is doing, and the update of the pulse width for your Servo, this is your culprit.