let 으로 블록 스코프 안에서 정의된 변수 i는 블록 범위를 벗어나는 즉시 접근할 수 없습니다. 따라서 결과로는 ReferenceError가 나오게 됩니다.
블록 단위로 스코프를 구분했을때는 훨씬더 예측가능한 let으로 변수 선언을 하는것을 추천합니다.
var 키워드는 for 문이 만들어낸 블록 스코프를 무시합니다.
그러나, 모든 블록 스코프를 무시하는 건 아닙니다. 화살표 함수의 블록 스코프는 무시하지 않습니다.
결론적으로 var키워드는 함수스코프만 따르지만 화살표함수의 블록스코프도 따릅니다.
let 키워드를 var 키워드보다 권장하는 이유
출처: 코드스테이츠