작성
·
202
0
제가 이해한 2가지를 적어보면 아래와 같습니다.
1. 함수가 호출될 때 실행 컨텍스트가 만들어진다.
2. 실행 컨텍스트가 만들어질 때 외부 렉시컬 환경 참조에 설정되는 것은 해당 실행 컨텍스트를 만들고(호출하고) 있는 실행 컨텍스트의 환경 레코드를 설정한다.
예를들어 아래 샘플코드에서는 add(200)이 호출될때 만들어지는 실행 컨텍스트의 외부 렉시컬 환경 참조에는 outer0() 실행 컨텍스트의 환경 레코드{value0:300, add:function, get:function}가 설정 된다. 최종적으로 add(200)의 실행 컨텍스트는 아래와 같다
이게 맞는 설명 인가요?
outer0() 실행 컨텍스트 : {
렉시컬 환경 컴포넌트 : {
환경 레코드 : {
value0 : 300,
add : function,
get : function
}
}
}
add(200) 실행 컨텍스트 : {
렉시컬 환경 컴포넌트 : {
환경 레코드 : {
param : 200
},
외부 렉시컬 환경 참조 : {
// outer0 실행컨텍스트의 환경 레코드를 참조
value0 : 300,
add : function,
get : function
}
}
}
function outer0() {
var value0 = 300;
function add(param) {
value0 += param;
};
var get = function() {
return value0;
}
add(200);
console.log(get());
};
outer0();
답변 4
0
0
넵. 앞에서 다시 보고 왔는데 "외부 렉시컬 환경 참조에 function 오브젝트의 [[scope]]를 설정" 이라고 적혀있는걸 보고. 제 설명이 틀린걸 확인습니다 ㅠㅜ.
scope 와 context 를 함께 생각하는게 어렵네요
0
위 설명이 맞다면 아래 샘플코드의 add(200)의 실행컨텍스트는 어떤 형태가 되나요?
function outer2() {
var value2 = 100;
function outer1() {
var value1 = 200;
function outer0() {
var value0 = 300;
function add(param) {
value2 += param;
};
var get = function() {
return value2;
}
add(200);
console.log(get());
};
outer0();
}
outer1();
}
outer2();
0
진도를 나가면서 스스로 검증해보세요. 그래야 확실하게 자신감을 갖게 됩니다. 비기너가 아니니까 스스로 검증하는 훈련도 필요합니다. 이러한 훈련이 굳건한 자산이 될 것입니다.