선언이란
연산의 대한 결과, 함수를 메모리에 할당하는 것
- 선언: 변수이름으로 메모리 공간을 확보
- 초기화: 변수에 undefind를 할당하여 초기화
- 할당: 초기화된 변수에 값을 할당
선언 키워드
var
- ES5에서 사용되어왔음
- 중복선언이 가능 (이전 선언을 덮어씌우기 가능)
- 선언적함수와 함께 호이스팅되어 변수선언 전에 참조가능하다.
- 함수레벨 스코프(블록레벨 스코프의 전역변수화)
const
- ES6이후 추가
- 중복선언이 불가능
- 런타임시 선언과 초기화 단계가 분리되어 호이스팅 되지 않는 것 처럼 작동한다.
- 값을 재할당 불가
let
- ES6이후 추가
- 중복선언이 불가능
- 런타임시 선언과 초기화 단계가 분리되어 호이스팅 되지 않는 것 처럼 작동한다.
- 값을 재할당 할 수 있다.
스코프란
다른 코드가 식별자인 자신을 참조할 수 있는 유효범위, 즉 식별자의 유효범위
명칭 | 범위 | 특징 |
전역 스코프 | 코드의 가장 바깥영역 | 어디에서든 참조가능 |
지역 스코프 | 함수 내부 | 지역과 하부 지역에서만 참조가능 |
렉시컬 스코프(static scope)
스코프는 함수의 실행시가 아니라 선언시에 결정된다.
ex) 클로저에서 반환된 내부함수가 내부의 변수에 접근 할 수 있는 것은 스코프가 함수 선언시에 결정되었기 때문이다.
함수레벨 스코프
함수 내부에서 선언된 변수에는 외부 함수에서 접근할 수 없다.
블록레벨 스코프
블록{} 내부에서 선언된 변수는 블록 외부에서 접근할 수 없다.
괄호 종류
- 대괄호 []
- 중괄호 {}
- 소괄호 ()
참고
모던 자바스크립트 Deep Dive 책