One benefit/rationale is local variables dont pollute your code. Let me give a normal loop example (this is just for analogy not an exact one, so no iterator use):
int i;
for(i=0;i<10;i++)
do...something
int j;
for(j=0; i<10; j++)
do...something
Now in the above code if look closely you will find a potential bug. i
has been mistakenly used in loop which iterates over j
.
So enhanced loops try to play safe by creating the variables locally, by which you can avoid above problem.