• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

선언적 환경 레코드 질문입니다.

20.03.26 09:07 작성 조회수 345

3

여기서 말하는 선언적 환경 레코드는 실행 콘텍스트의 환경 레코드 안에 있는걸 말씀하시는 건가요? 맞다면 point 변수는 외부 렉시컬 환경에 들어가는데 point 이름을 선언적 환경 레코드에 바인딩 하신다고 하셨는데 바인딩과 이부분은 상관없는 건가요? 

답변 6

·

답변을 작성해보세요.

2

답글을 작성하려 했는데, 이해 되셨다니 좋습니다.^^ 확인하는 차원에서, 함수 안에 작성된 모든 변수와 함수는 선언적 환경 레코드에 설정됩니다. 이때 식별자가 함수이면, book 함수 안의 모든 변수와 함수(함수도 이때는 식별자로 처리됩니다)를 [[scope]]에 설정하고, 여기서는 add() 함수. 그리고 add() 함수가 호출되면 add 함수의 [[scope]]에 설정된 것을 add 함수의 외부 렉시컬 환경 참조에 설정하여 참조합니다. 또한 add() 함수 안에는 변수와 함수가 없으므로 선언적 환경 레코드에는 아무것도 설정되지 않습니다.

1

글로벌 객체에서는 선언적 환경 레코드에 반인딩 되는게 맞게 이해하고 있는 걸까요? ==> 이 문장 앞까지는 맞습니다. 글로벌 오브젝트는 강좌의 조금 뒤에서 다루므로 그것을 참조해주세요. 글로벌 오브젝트는 차이가 있습니다. book 함수가 글로벌 함수이지만 호출되었을 때 함수 안에서 정리하는 것과는 차이가 있습니다. 이 부분은 정리가 어느 정도 정리가 되신 것 같으므로 글로벌 오브젝트에서 전체를 보고 정리하면 정립이 될 것 같습니다.

1

point 변수를 해결(인식)하는 시점과 사용하는 위치가 중요합니다만, 질문 내용으로는 point 변수의 해결 시점과 사용 위치를  알 수가 없습니다. 위 내용이 동영상의 어디 위치(분:초)인지 알려 주시기 바랍니다.

참고로 book() 함수에서 point 변수를 식별할 때는 선언적 환경 레크드에 설정됩니다. 반면, add() 함수 안에서는 book() 함수 안에 작성된 모든 변수가 외부 렉시컬 환경 참조에 설정됩니다. 따라서 point 변수의 해결 시점과 사용 위치에 따라 다릅니다. 

0

I.m yong님의 프로필

I.m yong

질문자

2020.03.26

넵 답변 감사합니다 !

0

I.m yong님의 프로필

I.m yong

질문자

2020.03.26

감사합니다. 질문 내용을 다시 읽다보니 잘못이해한 것 같아 수정했습니다. 

만약  선언된 book 함수 밖에 value라는 변수가 있다면 book함수가 호출되어 함수안으로 들어갈 때 value는 외부 렉시컬 환경에 바인딩 되고 글로벌 객체에서는 선언적 환경 레코드에 반인딩 되는게 맞게 이해하고 있는 걸까요?

0

I.m yong님의 프로필

I.m yong

질문자

2020.03.26

아 이해 되었습니다. 답변 감사합니다 ^^