'변수의 유효범위' 라는 의미로 사용됨.
변수에 접근할 수 있는 범위.
중괄호(블록) 안쪽에 변수가 선언되었는가,
바깥쪽에 선언되었는가가 중요.
블럭스코프: 중괄호를 기준으로 범위가 구분됨(화살표함수는 블록스코프)
함수스코프: function키워드가 등장하는 함수 선언식 및 함수 표현식으로 구분됨
let username = 'kim';
if (username) {
let message = `Hello, ${username}!`;
console.log(message); // ?
}
console.log(message); // ?
바깥스코프에서 선언한 변수를 사용할경우, 정상 출력
안쪽스코프에서 선언된 변수를 바깥에서 사용할 경우, reference error
스코프는 충첩이 가능함.
만약, a스퀘어 안쪽에 b스퀘어 존재하는 방식으로 4개의 중첩된 스퀘어가 있을 경우,
let a : global scope (전역) // a 사용가능
let b : local scope (지역) // a, b 사용가능
let c : local scope (지역) //a, b, c 사용가능
let d : local scope (지역) //a,b,c,d사용가능
전역스코프와 지역스코프는 반대말임...
지역변수는 전역변수보다 더 높은 우선순위를 가집니다
var (권장하지 않음)
: 블록스코프를 무시하고, 함수 스코프만 따름.
즉, 블럭범위를 벗어나도 안쪽스코프에서 선언된 변수를 사용할 수 있음
재할당 가능/ 재선언 가능
let
: 블록스코프와 함수 스코프 모두 따름
재할당 가능/ 재선언 불가
const
: 블록스코프와 함수스코프 모두 따름
재할당 불가능/ 재선언 불가능