일단 node.js에서의 전역 변수는 global이고, JS에서의 전역 변수는 window이다. 그런데, 좀 헷갈리지 않나?? 결국은 node.js도 JS를 가동시키는 시스템인데... 그래서 나온게 globalThis 이다!!
일단 이 둘은 전부다 빈 객체이다.
그리고,
이 빈 객체 안에서 무언가를 할당 해주면, 이런 식으로 바뀌는 구조이다.
하지만, exports를 써주는 경우는 할당해줘야 되는 방법이 module.exports와 다르다.
line 4,5 와 line 7은 같은 의미이다.
하지만, 이 원칙이 함수 일때는 달라진다.
또한,
한 파일에 exports와 module.exports를 같이 써주면, 둘은 더이상 같지 않다. 그냥 맨 마지막 줄에 써준 것이 작동이 되는데... 절대 이렇게 하지 말자!!
사실, exports와 module.exports가 헷갈린다면, 그냥 module.exports만으로 사용해주는 게 제일 좋다. 그러나, 개발자들마다 모듈 넘겨주는 방식이 다를 수 있으니, 이런 게 있다는 것만 알아두자!!
=> { } 빈 객체가 출력 된다.
무언가 생각하지 않는가?? module.exports와 exports도 빈 객체 였던 것같은데...
그렇다!! Node.js에서는 this === exports === module.exports 가 같다!!
ex)
즉, this를 exports 대신 사용할 수 있다.
하지만, 헷갈리니까 이렇게 쓰는 사람이 있다면, 이해할 수 있게 알아만 두고 내가 이렇게 쓰지는 말자!!
마지막으로, this가 함수 안에서 쓰이면, 더이상 exports와 같지 않다.
this === global 이 된다.
this === exports 는 거짓!!!!
this === global 은 참!!!!!
[ this가 왜 않좋은 문법인지 알겠다. 예외가 너무 많음... ]
여기까지 exports와 this in Node.js 끝!!!!!!
자료 출처 및 참고 자료들
이번 블로그는 코드스테이츠의 강의 내용과 ZeroCho 블로그의 일부를 바탕으로 작성했으며, 그 어떠한 상업적 용도도 없음을 밝힌다.
node.js 교과서 written by 조현영
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
https://www.youtube.com/watch?v=gUwbGs-bNRo&list=PLcqDmjxt30RuRk0gcFwT_s7nexAYRF2_I&index=19