let

일부 기억과 MDN에 있는 자료를 참고합니다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/let

let 구문은 블록 유효 범위를 갖는 지역 변수를 선언하며, 임의로 값을 초기화할 수 있습니다.

최상위

MDN 한국어 번역이 잘못됐습니다. 번역 오류는 아니고 영어 문서가 업데이트되면서 차이가 나는 것 같습니다. 어찌되었든 프로그램 또는 함수의 최상위에서 let과 var는 다르게 동작합니다.

강의 시간에도 중문에만 사용할 수 있으며 for 문에서만 예외적으로 단문에서 사용할 수 있다는 이야기를 들은 것 같네요.

프로그램 또는 함수의 최상위에서는 let은 var와 완전히 똑같이 동작한다. 예를 들어,

At the top level of programs and functions, let, unlike var, does not create a property on the global object. For example:

var x = 'global';
let y = 'global';
console.log(this.x);
console.log(this.y);

해당 코드의 결과는 'global'과 undefined 입니다. 프로그램 또는 함수의 최상위에서 let은 글로벌 오브젝트의 속성을 생성하지 않는다고 합니다.

jsFiddle에서 최상위 설정을 테스트할 때는 javascript 옵션에서 LOAD TYPE을 수정해주어야 원하는 결과를 얻을 수 있습니다.

jsFiddle