• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

실행 컨텍스트 질문입니다!

20.08.01 11:00 작성 조회수 118

0

function a() {
  var value = 456;
  console.log(value);
  function b() {
      console.log(value);
      function c() {
          console.log(value);
          function d() {
              console.log(value);
          }
          d();
      }
      c();
  }
  b();
}
a();

선생님 이 코드에서 value가 전부 456으로 출력이 되는 이유를 모르겠습니다.

d() 함수에서 선언적 환경 레코드와 외부 렉시컬 환경참조 안에는 어떠한 변수도 참조되지 않을거같은데

1. 제가 스코프 영역에대해 잘못알고있는건가요?

2. d() 또는 c()의 스코프 영역이 어떻게되나요?

답변 2

·

답변을 작성해보세요.

2

456이 출력되는 이유는 외부 렉시컬 환경 참조 때문입니다.  d()에서 우선 선언적 환경 레코드에서 value를 찾습니다. 그런데 없으므로 외부 렉시컬 환경 참조에서 찾습니다. 그런데 없으므로 다시 외부 렉시컬 환경 참조의 외부 렉시컬 환경 참조에서 찾습니다. 이런 방법으로 계속 외부 렉시컬 환경 참조를 따라 올라가면서 value 변수를 찾습니다.

d()의 스코프는 c()이고 c()의 스코프는 b()입니다. 따라서 d()의 스코프는 c()도 되고 b()도 됩니다. 물로 a()도 됩니다.

 

1

찡태님의 프로필

찡태

질문자

2020.08.01

감사합니다!!