But I'd add that large function like this tempt the programmer to do something like using one of the intermediate variables in the first "bit" to make a decision in the second "bit" out of convenience. Add ten more "bits" and ten more such "conveniences" and you get an incredibly fragile, bug-prone mess.
Which is to say, a purely lexical-order division of operations is bad because you easily wind-up with undefined defined interface between the various operations. Figuring out both how a simple for-loop really works as well as how the original programmer intended it to work, can be quite hard. Add several for-loops and you get a true mess.
Some people get really good at cranking out these long functions and as you say, it look superficially easier. I wonder if a language could support "functional abstraction brackets" that would allow these long sections but guarantee their logic isn't folded together
Something like
function big() {
let x,y,z;
{{@First_bit //begin forced separation...
...
{{@Second_bit //begin forced
...
}
Here "First_bit" would be guaranteed to be equivalent to functions of just x, y, z.