Javascript/ES6
스코프, let, const
dongling
2024. 6. 12. 21:41
728x90
SMALL
✅ 요약
- 스코프란?
- 식별자에 접근할 수 있는 범위
- 스코프 종류 : 블록 스코프, 함수 스코프
- var, let, const, this 키워드
- 호이스팅
- 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
- var 변수 호이스팅 → undefined로 변수 초기화
- let, const 변수 호이스팅 시 → 변수 초기화 X
⚡ 스코프 (Scope)
- 정의 : “식별자 접근 규칙에 따른 유효 범위”
- 식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재
- 범위는 중괄호(블록) 또는 함수에 의해 나눠짐
- 그 범위를 스코프라고 부름
- 각각을 Block Scope와 Function Scope
⚡ 스코프 주요 규칙
- 안쪽 스코프에서 바깥쪽 스코프로 접근할 수 있지만 반대는 불가능하다.
- 스코프는 중첩이 가능하다.
- 전역 스코프와 지역 스코프
- 지역 변수(지역 스코프)는 전역 변수(전역 스코프)보다 우선순위가 더 높다.
⚡스코프의 종류
- 블록 스코프, 함수 스코프
- 화살표 함수는 함수 스포트가 아니다.
⚡블록 스코프
- 블록을 나타내는 중괄호 { }
- { } 안과 밖의 변수 이름이 같더라도 스코프가 다르므로 변수가 선언되고 각 변수에 할당된 값이 대체되지 않고 유지됨
🔹 var 키워드
- 변수의 구분 - 로컬 변수, 글로벌 변수
- 구분 이유 : 스코프(scope)
- 로컬 변수는 함수 또는 오브젝트를 스코프로 사용하려는 의도
- 글로벌 함수는 프로그램 전체에서 공요으로 사용하려는 의도
🔹 let 키워드
- 함수 안에 작성한 let 변수는 함수가 스코프
- 변수는 함수가 스코프가 아니라 if 문의 블록 {}이 스코프
- ex) if(a=b) { let sports = “축구” }
- 블록 밖에 같은 이름의 변수가 있어도 스코프가 다르므로 변수 각각에 값을 설정할 수 있으며 변수 값이 유지됨
🔹 const 키워드
- 변수에 할당된 값을 변경할 수 없음
- 선언만 할 수 없으며, 초깃값을 할당해야 함
🔹 this 키워드
- 글로벌 오브젝트를 참조
- 글로벌 오브젝트가 window 오브젝트는 아니지만, window 오브젝트로 글로벌 변수에 접근할 수 있음
- 자바스크립트에 글로벌 오브젝트는 있지만 window 오브젝트는 없다.
- window 오브젝트에는 DOM메서드도 있고 window 오브젝트 자체의 프로퍼티도 있다.
- window 오브젝트에 글로벌 오브젝트가 존재하는 개념
🔹 function
- 함수도 스코프를 가지므로 하나의 블록 스코프다.
- 함수에 선언된 모든 변수가 함수 스코프에 속한다.
🔹 try-catch
- try 블록 {} 기준으로 블록 스코프를 갖는다.
- catch 블록은 스코프를 갖지 않으며 try 블록 스코프에 속한다.
🔹 switch-case
- switch 블록이 블록 스코프
- switch 안의 case는 별도의 스코프를 갖지 않으며 switch의 스코프에 속한다.
🔹 for()
- for문에서 let 변수를 반복할 때마다 스코프를 갖는 반면, var 변수는 스코프를 가지지 않음
📎 호이스팅
함수 선언문은 함수를 호출하는 코드를 위에 작성하고 호출된 함수를 아래에 작성해도 함수가 호출되는 것을 “호이스팅”이라고 한다.
- var 변수
- 함수 선언문과 차이가 있음.
- 변수를 사용하는 코드를 위에 작성하고 아래에 변수를 선언해도 에러가 나지 않음
- let 변수
- 호이스팅이 되지 않음
- let 변수를 사용하는 코드를 위에 작성하고 아래에 변수를 선언하면 에러 발생
728x90
LIST