-
[JAVASCRIPT] 실행 컨텍스트와 클로저(1)Programming/JAVASCRIPT 2019. 12. 4. 17:44
실행 컨텍스트 개념
* 실행 컨텍스트 - > 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념
콜 스택과 연관하여 정의하면, "실행 가능한 자바스크립트 코드 블록이 실행되는 환경"
-> 대부분 프로그래머는 함수로 실행 컨텍스트 만듬
ex)
console.log("This is global context");
function ExContext1() {
console.log("This is ExContext1");
};
function ExContext2() {
ExContext1();
console.log("This is ExContext2");
};
ExContext2();
(출력)
This is global context
This is ExContext1
This is ExContext2
실행 컨텍스트 생성 과정
ex)
function execute(param1, param2) {
var a = 1, b = 2;
function func() {
return a+b;
}
return param1 + param2 + func();
}
execute(3, 4);
순서 ->
활성 객체 생성
* 새로 만든 컨텍스트로 접근 가능 , 엔진 내부에서 접근 가능 , 사용자는 접근 불가
arguments 객체 생성
* 앞서 만든 활성 객체는 arguments 프로퍼티로 이 arguments 객체를 참조
스코프 정보 생성
* 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보 생성 , 현재 컨텍스트에서 특정 변수에 접근해야 할 경우, 이 리스트 활용
상위 실행 컨텍스트의 변수도 접근 가능 , 거기서 찾지 못하면 error
-> 이 리스트가 스코프 체인
변수 생성
* 변수 객체 안에서 호출된 함수 인자는 각각의 프로퍼티가 만들어지고 그 값이 할당
this 바인딩
* this가 참조하는 객체가 없으면 전역 객체를 참조
스코프 체인
* 자바스크립트에서는 함수 내의 {,} 블록은 유효 범위가 없음 , 오직 함수만이 유효 범위의 한 단위
이 유효 범위를 나타내는 스코프가 [[scope]] 프로퍼티로 각 함수 객체 내에서 연결 리스트 형식으로 관리. 이것이 스코프 체인
* 각각의 함수는 [[scope]] 프로퍼티로 자신이 생성된 실행 컨텍스트의 스코프 체인을 참조
함수가 실행되는 순간 실행 컨텍스트가 만들어지고, 이 실행 컨텍스트는 실행된 함수의 [[scope]] 프로퍼티를 기반으로 새로운 스코프 체인을 만듬
클로저
클로저의 개념
* 이미 생명 주기가 끝난 외부 함수의 변수를 참조하는 함수
ex)
function outerFunc(arg1, arg2) {
var local = 8;
function innerFunc(innerArg) {
console.log((arg1 + arg2) / (innerArg + local));
}
return innerFunc;
}
var exam1 = outerFunc(2, 4);
exam1(2);
결과 ((2 + 4) / (2 + 8))
'Programming > JAVASCRIPT' 카테고리의 다른 글
[JAVASCRIPT] 함수와 프로토타입 체이닝(3) (0) 2019.12.04 [JAVASCRIPT]함수와 프로토타입 체이닝(2) (0) 2019.12.04 [JAVASCRIPT] 함수와 프로토타입 체이닝(1) (0) 2019.12.04 [JAVASCRIPT] 데이터 타입과 연산자(3) (0) 2019.12.04 [JAVASCRIPT] 데이터 타입과 연산자(2) (0) 2019.12.04