최소한 몇 가지 이유가 있다.
• 전역 객체는 이미 가장 일반적인 환경인 웹 브라우저에서 속성으로 인해 극적으로 과부하 상태이다. var로 선언된 모든 전역 변수가 등록될 뿐만 아니라 ID가 있는 모든 요소, 이름이 있는 대부분의 요소, 기타 많은 “자동 전역”에 대한 속성도 가져온다. 그냥 혼잡하다. 적당한 것이 좋은 것이다.
• 다른 코드에서 발견하기가 더 어렵다. let이나 const 전역 변수를 사용하려면 해당 이름을 알아야한다. 전역 객체의 속성 이름을 보면서 찾을 수 없다. 이것은 그다지 유용하지 않다. 비공개를 원한다면 전역 변수를 만들지 말자. 어쨌든 정보 유출은 조금 덜 된다.
• 자바스크립트 엔진이 전역 객체의 속성에 적용할 수 없는 방식으로 변수(특히 const)에 대한 접근을 최적화할 수 있다.
자동 전역에 대해 말하자면, let이나 const (또는 class)로 선언된 전역은 자동 전역을 덮어쓴다(즉, 숨긴다. let과 const 선언이 “이긴다”). var로 선언된 전역의 모든 경우에 해당되는 것은 아니다. 전통적인 예는 웹 브라우저에서 전역 name을 사용하려는 것이다. 브라우저에서 전역 객체는 페이지에 대한 window 객체이며 name이라는 속성이 있으며 var 전역으로 숨길 수 없으며 값은 항상 문자열이다.
// 브라우저에서의 전역 스코프 var name = 42; console.log(typeof name); // "string"