JavaScriptにはブロックスコープというスコープがあります。
const animal = [{name:"lion",cry:"gaooo"},{name:"horse",cry:"hihi-n"}]
for (let i = 0;i < 2;i++) {
const name = animal[i].name;
const cry = animal[i].cry;
console.log(name);
console.log(cry);
}
JavaScriptではconstは定数の定義に使われます。
nameやcryは再代入できない定数として定義されているので、2回目以降のループで上書きができなさそうですがそうはなりません。
波括弧{}で囲まれた範囲内がブロックスコープです。スコープ内で宣言された変数はその波括弧内からしか参照できません。
forループではくり返しごとに、新たなブロックスコープを作成するので
1回目と2回目のnameおよびcryは別のスコープとなるので問題が起きません。
C→COBOL→VB→Javaと変遷してきた私には、結構意外でした。