Programming/JAVASCRIPT

[JAVASCRIPT] 실행 컨텍스트와 클로저(1)

100winone 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))