let,const 는 중복 선언 허용 X (Syntaxerror (문법에러) 발생)!!
👉🏽 중복허용이 좋지 않은 이유 : 생명 주기가 긴 전역 변수는 변수 이름이 중복될 가능성이 있다. 변수 이름이 중복되면 의도치 않은 재할당이 이뤄지고,의도치 변수 값이 변경되는 부작용을 발생한다.
let,const: 블록 레벨 스코프 (함수 몸체 뿐만 아니라 if,for,while,try/catch 등이 지역 스코프를 만든다.)
var: 함수 레벨 스코프 (오로지 함수의 코드 블록 만을 지역 스코프로 인정한다)
var i=10;
for(var i=0;i<5;i++){
console.log(i)
} //0 1 2 3 4
console.log(i); //5
여기서 매일 헷갈리는 부분이 있었다. for문 마지막의 i가 4로 끝나고, 전역변수로 재할당이 일어났으면 마지막줄 console.log(i)는 4가 나와야하는 것이 아닐까? 왜 5인 것일까? 난 4라고 생각했다. 하지만 ㄴㄴ...
👉🏽 i가 4까지로 검사를 하고 5로 바뀌었을 때 조건문에 부합하지 않으니 for문이 중단되는 것이다. 하지만. i는 이미 5로 바뀌어 검사를 했기때문에 마지막 for문 밖에서 찍은 i가 전역 변수라면 i는 5가 되어있는 것이다.
여기서 더 나아가, 만약에 const나 let이였다면 마지막 console.log(i)는 10이 나왔을 것이다. {}코드 블럭에서 지역스코프를 만들기 때문에, 블럭 밖에서 생명주기가 끝나 소멸되고 전역변수로 정의되었던 let i=10이 나오기 때문이다.