변수에 접근 가능한 범위를 전역, 함수, 블록으로 구분합니다.
let과 const는 가장 가까운 중괄호 블록에 묶이고 함수 내부 변수는 밖에서 접근할 수 없습니다. 안쪽 스코프는 바깥 변수를 볼 수 있지만 같은 이름으로 가릴 수 있습니다.
바깥의 label과 블록 안의 label은 이름만 같은 서로 다른 변수입니다. 중괄호 블록 안에서는 안쪽 const label이 바깥 것을 가려 블록 안이 이어 붙고, 블록을 벗어나면 안쪽 변수는 사라져 다시 바깥 label이 보입니다. text는 블록 밖에서 let으로 선언되었기 때문에 블록 안에서도 값을 이어 붙일 수 있어 세 단계가 한 문자열에 모입니다.
스코프는 함수를 호출한 위치가 아니라 함수를 작성한 위치로 정해지며, 이를 렉시컬 스코프라고 합니다. 블록 바깥에서 label을 반환하도록 정의한 함수를 블록 안에서 호출해도, 그 함수는 자신이 정의된 곳의 label을 읽어 블록 안이 아니라 바깥을 돌려줍니다.
모든 값을 전역에 두면 서로 다른 기능이 같은 이름과 상태를 바꾸기 쉽습니다.
직접 바꿔보세요함수 스코프 예제를 추가하고 바깥에서 내부 변수에 접근해보세요.