인프런 커뮤니티 질문&답변

이하영님의 프로필 이미지
이하영

작성한 질문수

자바스크립트 중고급: 엔진 핵심

2. this 참조 범위, this와 strict 모드, this 참조 오브젝트, [정리 시간]

[정리 시간] 작성해보았습니다.

작성

·

170

3

선생님 안녕하세요. 좋은 강의 감사드립니다!

[정리 시간]의 내용을 작성해보았습니다. 

[코드 1]

1. 마지막 줄에서 fn() 호출

2. fn() 함수는 글로벌 함수로, 글로벌 오브젝트는 이름이 없으므로 함수 이름만 작성하여 호출함

3. 따라서 이 때 this는 글로벌 오브젝트를 참조함

4. 또한 window는 글로벌 오브젝트를 참조함 

5. 그러므로 console.log(this === window)에서 true를 출력함

6. console.log(this.value)에서도 this는 글로벌 오브젝트를 참조

7. 글로벌 오브젝트에 value라는 프로퍼티가 없기 때문에 undefined를 출력함

[코드 2]

1. 마지막 줄에서 book() 호출

2. book() 함수는 글로벌 함수로 함수 내부에서 this는 글로벌 오브젝트를 참조함

3. 따라서 this.getTitle() 함수를 호출하면 

4. function getTitle() {console.log('HTML책');}로 가서 HTML책을 출력함

5. 다시 book 함수의 내부로 돌아가 getTitle()을 호출

6. 이 때의 getTitle() 함수는 우선적으로 book 함수의 선언적 환경 레코드에서 getTitle을 찾아 실행

7. 따라서 function getTitle() {console.log('JS책');}로 가서 JS책을 출력함

감사합니다~!!

답변 2

2

김영보님의 프로필 이미지
김영보
지식공유자

좋습니다. 용어 사용도 좋았고, 코드를 음미하면서 정리했다는 느낌이 듭니다.

한편, 다른 관점입니다만, 내가 정리한 문장(시나리오)이 맞다는 것을 스스로 검증하려면 어떻게 해야 할까요?
코드를 지우고 작성한 시나리오를 따라 가면서 코드를 작성해 보는 것입니다. 아직 이른 감이 있습니다만, 하실 수 있을 것 같아요. 지금은 아니더라도 염두에 두고 문장을 정리하면 더 정밀하게 작성하게 됩니다.

이 방법을 훈련하면 요구사항을 분석할 때 작성한 형태로 시나리오를 작성할 수 있게 됩니다. 그러면 어떻게 될까요? 시나리오(문장)를 기준으로 코드를 작성하는 모습이 됩니다. 코드의 품질이 좋아지는 것은 당연하고요, 이에 따라 테스트도 쉽고 리팩토링을 하지 않아도 됩니다. 왜냐, 시나리오(문장)를 작성하면서 테스트와 리팩토링을 했기 때문입니다. 코드 중심이 아니라 시나리오 중심이 됩니다.

처음에는 코딩 경험이 필요하므로 어쩔 수 없지만, 이것이 최종 모습이 되어야 합니다. 시나리오를 작성하지 않고 코드를 먼저 작성하는 것은 스케쥴 없이 해외 여행을 하는 것과 같습니다. 먼저 스케쥴(시나리오)을 짜고 스케쥴에 따라 여행(코드 작성)을 해야 하듯이...

이하영님의 프로필 이미지
이하영
질문자

좋은 말씀 감사드립니다. 나아가야 할 방향을 알게 되었습니다! 

0

훌륭한 해석입니다. 덕분에 제 생각을 정리하는데도 도움이 된 거 같네요.

이하영님의 프로필 이미지
이하영

작성한 질문수

질문하기