• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문 있습니다.

21.01.03 19:58 작성 조회수 127

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

kimyongin님의 프로필

kimyongin

질문자

2021.01.03

넵. 앞에서 다시 보고 왔는데 "외부 렉시컬 환경 참조에 function 오브젝트의 [[scope]]를 설정" 이라고 적혀있는걸 보고. 제 설명이 틀린걸 확인습니다 ㅠㅜ.

scope 와 context 를 함께 생각하는게 어렵네요 

0

kimyongin님의 프로필

kimyongin

질문자

2021.01.03

위 설명이 맞다면 아래 샘플코드의 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

진도를 나가면서 스스로 검증해보세요. 그래야 확실하게 자신감을 갖게 됩니다. 비기너가 아니니까 스스로 검증하는 훈련도 필요합니다. 이러한 훈련이 굳건한 자산이 될 것입니다.