// 1. Lexical 환경
// one : 초기화X 사용불가
// addOne : function 사용가능 단 변수에 할당한 함수표현식은 안됨
let one
// 2. Lexical 환경
// one : undefined 사용 가능 할당은 되어있지 않음
// addOne : function
one = 1
// 3. Lexical 환경
// one : 1 할당이 되었음
// addOne : function
function addOne(num) {
console.log(one + num)
}
addOne(5)
// 4. Lexical 환경
// one : 1
// addOne : function
// 함수가 실행이 되면서 새로운 Lexical 환경이 새로 만들어지고 함수가 가진 매개변수와 지역변수가 저장이 됨
// num : 5
// 함수가 호출되는 동안
// 전역 Lexical 환경
// one : 1, addOne: function
// 내부 Lexical 환경
// num : 5
// 전역 Lexical환경과 내부 Lexical 환경을 가지며 내부 Lexical환경은 외부 Lexical환경에 대한 참조를 가짐
이런것을 Closure이라고 함
1) 함수와 렉시컬 환경의 조합
2) 함수가 생성될 당시의 외부 변수를 기억
3) 생성 이후에도 계속 접근 가능