자바스크립트는 어휘적 환경을 갖습니다.
1줄
2줄 let one
3줄 one = 1;
4줄
5줄 function addOne(num) {
6줄 console.log(one + num);
7줄 }
8줄
9줄 addOne(5);
Lexical 환경 순서
1줄
호이스팅 됨.
one: 초기화 X, 사용불가능
addOne: function
2줄
one: undefined, 사용가능
addOne: function
3줄
one: 1
addOne: function
이미 함수선언은 1줄에서 완료 되었음
.
.
.
9줄
함수 실행 -> 새로운 렉시컬 환경 생성
num:5
전역 렉시컬 환경
one:1
addOne:function
내부 렉시컬 환경 -> (참조:외부렉시컬)
num: 5
변수를 찾을때 내부 -> 외부 -> 전역으로 탐색
함수와 렉시컬환경의 조합
함수가 생성될 당시의 외부 변수를 기억,
생성 이후에도 계속 접근이 가능하다.
function makeAdder(x){
return function(y){
return x + y;
}
}
const add3 = makeAdder(3);
console.log(add3(2)); // 5
전역 렉시컬 환경
makeAdder: functionb
add3: function
makeAdder 렉시컬 환경
x:3
익명함수 렉시컬 환경
y:2
익명함수는 본인이 y를 가지고 있고,
상위 함수인 makeAdder의 x를 참고(기억)하고 어서 접근이 가능하다.