区别在于后者的i结束循环仍然可用。
从代码清晰的角度来讲,一个变量如果不用了就应该消失。如果不需要知道循环结束时i的值 ,就应该写在内部。
只有一个循环的时候区别不大,有多个循环的时候区别就大了。因为后边的循环不声明i,等于是依赖外部环境的变量。而这会使得代码难以移植。
所以,只要有可能,应该尽量使用前一种写法。