내용이 안 보인다면 쿠키/캐시를 지우고 새로고침 하세요!
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

게시글

강좌21 - NodeJS - 4달 전 등록 / 3달 전 수정

Node에서의 this

조회수:
0
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ
이 블로그는 광고 클릭 수익으로 운영됩니다!
괜찮으시다면 광고 차단을 풀어주세요 ㅠㅠ

안녕하세요. 이번 시간에는 Node에서의 this에 대해 다뤄보겠습니다. 

자바스크립트의 this는 많은 분들을 헷갈리게 하는데요. 제가 실행 컨텍스트 강좌this 강좌에서 this가 무엇인지 쉽게 설명해두었습니다. 그런데 노드에서는 this가 또 다릅니다. 물론 큰 원칙에서는 일관성이 있지만 세세한 부분이 다르기 때문에 알아보도록 하겠습니다.

test.js

console.log(this)

 this가 뭔지 콘솔 로그 해보고, 노드로 실행해 봅시다.

$ node test
{}

오잉, window가 아니라 빈 객체가 나오네요? 사실 window와 document는 Node에 없는 객체입니다. 두 객체는 브라우저 런타임에서 넣어주는 객체이기 때문이죠. 노드는 브라우저와는 다른 런타임이기 때문에 DOM과 관련된 두 객체를 넣지 않습니다. 이제 빈 객체의 정체를 알아봅시다.

test.js

console.log(this, module.exports, exports);
console.log(this === module.exports);
console.log(this === exports);
console.log(module.exports === exports);
$ node test
{} {} {}
true
true
true

네, Node에서의 this는 바로 module.exports 입니다. 파일을 모듈로 사용할 수 있게 해주는 객체이죠. module.exports와 exports, this는 같습니다. 삼위일체인 셈이죠.

그렇다면 노드에서 this는 왜 전역 객체(global, 브라우저의 window 급)을 가리키지 않을까요? 사실 가리키는 경우도 있긴 합니다.

test.js

function a() {
  console.log('a', this === exports, this === global);
}
const b = () => {
  console.log('b', this === exports);
};
a();
b();
$ node test
a false true
b true

전역 환경에서의 this만 module.exports고, 함수 선언문 안의 this는 global입니다! 매우 놀라운 현상이죠. 화살표 함수의 경우는 this가 상위 환경의 this를 물려받기 때문에 module.exports와 같습니다.

노드에서는 전역 환경의 this만 global이 아니라 module.exports를 가리킨다는 사실을 알아두세요. 이상으로 this에 대한 모든 강좌를 마칩니다~.

투표로 게시글에 관해 피드백을 해주시면 많은 도움이 됩니다. 오류가 있다면 어떤 부분에 오류가 있는지도 알려주세요! 잘못된 정보가 퍼져나가지 않도록 도와주세요.
Copyright © 2016- 무단 전재 및 재배포 금지

댓글

1개의 댓글이 있습니다.
4달 전
Node 소스들을 보면 전역에서 화살표 함수를 잘 안쓰는 이유가 this가 global을 가르키지 않기 때문일까요?
4달 전
그것 때문에 안 쓴다기 보다는 코드가 옛날에 작성돼서(화살표함수가 없던 시절) 안 쓸 확률이 더 큽니다. 전역에서 this를 쓸 일은 거의 없습니다.