ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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))

Designed by Tistory.