ECMA-/Javascript 언어는 withvar로 선언된 모든 변수를 함수의 맨 위로 호이스트합니다. 이 언어에는 기능 범위가 있고 다른 많은 C 유사 언어처럼 블록 범위가 없기 때문입니다.
function() { for(var a = 0; a < 7; a ++) { var b = 100; } }
와 동일합니다
function() { var b; for(var a = 0; a < 7; a ++) { b = 100; } }
그러나 let의 경우에는 그렇지 않습니다. let 은 어휘 범위를 지정합니다. 따라서 루프 외부에서 동일한 변수가 필요하지 않은 경우(또는 각 반복이 이전 반복에서 해당 변수에 대해 수행된 작업에 의존하는 경우) 변수가 사용되는 범위를 선언하는 것이 좋습니다.