호이스팅
- 변수 : 변수는 하나의 값을 저장하기 위해 확보된 메모리 공간 or 그 공간을 식별하기 위해 붙인 이름
- 식별자 : 변수의 이름 ... => 값이 아닌 메모리 주소를 기억함
호이스팅?
- 코드를 실행하기 전에 선언된 변수 및 함수를 해당 범위의 맨 위로 이동하는 JavaScript의 메커니즘
-> 모든 선언문은 런타임 이전에 실행 되기 때문, 실제 코드 라인이 변경되거나 하는 건 아님
var, let, const
- var 키워드로 선언된 변수는 선언 단계와 초기화 단계가 한번에 이루어진다.
즉, 스코프에 변수를 등록하고, 등록된 변수에 메모리를 할당하고 undefined로 초기화 하는 것이 동시에 일어남
- let과 const 또한 var과 동일하게 hoisting이 된다. 하지만 대부분 let과 const는 호이스팅이 발생하지
않는 다고 느낌
=> TDZ의 제약을 받기 때문
TDZ란?
- TDZ: Temporal Dead Zone (일시적 사각지대)
- 변수에 담길 값을 위한 공간이 메모리에 할당되지 않은 상태
let 키워드로 선언한 변수는 스코프의 시작 지점부터 초기화 단계 시작 지점까지 변수를 참조할 수 없다.
이 구간을 TDZ라고 부른다
console.log(foo)
let foo;
console.log(foo);
foo = 1;
console.log(foo);
실행 컨텍스트가 생성될때 let/const 변수는 lexical Environment에 저장됨
그래서 초기화(값 바인딩) 되기 전에는 접근할 수 없는 TDZ 상태에 있게 됨
반면에 var 변수는 Variable Environment에 따로 저장=> TDZ에 영향을 받지 않음
parameter 와 argument
parameter 란? (매개변수)
- 메서드 선언부에서 정의한 변수
- 함수 등 서브루틴의 input 으로 제공되는 여러 데이터 중 하나를 가리키기 위해 사용되는 변수의 한 종류
- 서브루틴 : 하나 이상의 장소에서 필요할 때마다 반복해서 사용할 수 있는 부분적 프로그램
- 함수 내부의 각 값이 어떤 역할을 할지 정의
argument 란?(전달인자)
- 메서드 호출부에서 전달하는 값
- 프로그램, 서브루틴, 함수간 전달되는 값 or 주소값