일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 한글입력 잘림
- 블록 스코프
- 객체지향
- 자바스크립트 객체 만들기
- 비주얼스튜디오 코드
- 생활코딩
- python GUI 사용하기
- 기획자랑 사이좋게 지내고 싶다
- 닐 스미스 지음
- python tkinter 인터페이스
- 객체
- 맥 mysql
- jquery 사용하기
- 자바스크립트 class
- 제이쿼리연결
- max MySQL
- 배열 분해 할당
- 제이펍 출판
- 자바스크립트 배열 할당
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 한글입력 안됨
- max apache
- 맥 아파치
- 한글입력 오류
- 한글입력 씹힘
- 황반석 옮김
- 한글잘림
- 자바스크립트 객체
- SwiftUI 기반의 iOS 프로그래밍
- 자바스크립트
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 한글입력 잘림
- 블록 스코프
- 객체지향
- 자바스크립트 객체 만들기
- 비주얼스튜디오 코드
- 생활코딩
- python GUI 사용하기
- 기획자랑 사이좋게 지내고 싶다
- 닐 스미스 지음
- python tkinter 인터페이스
- 객체
- 맥 mysql
- jquery 사용하기
- 자바스크립트 class
- 제이쿼리연결
- max MySQL
- 배열 분해 할당
- 제이펍 출판
- 자바스크립트 배열 할당
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- 한글입력 안됨
- max apache
- 맥 아파치
- 한글입력 오류
- 한글입력 씹힘
- 황반석 옮김
- 한글잘림
- 자바스크립트 객체
- SwiftUI 기반의 iOS 프로그래밍
- 자바스크립트
- Today
- Total
java,javascript,android,php,sql,공부용,메모용
module, exports, require / 노드의 this - 노드기능 06 본문
module, exports, require / 노드의 this - 노드기능 06
yy_dd2 2022. 12. 10. 19:39https://tog-code.tistory.com/139
모듈, 모듈화하기, 노드 모듈 - 노드기능 02
노드는 코드를 모듈로 만들 수 있다. (브라우저의 자바스크립트와 다른점) 모듈 : 특정한 기능을 하는 함수나 변수들의 집합 모듈 필요한 기능만 재사용 프로그램 → 모듈도입 js → 프로그램A js
tog-code.tistory.com
모듈화 한 내용중에
var.js를 변경해봤다
module
// * module.exports 대신 exports로 각각 대입해도 동작함
// exports 객체 사용 시
// 1. exports 에 직접 객체를 대입해도 되지만 꼭 속성명과 속성값을 대입해야 함
// 2. module.exports 에 함수를 대입한 경우는 exports로 대입 불가능
// 3. exports 와 module.exports는 참조관계가 있어 한 모듈에 이 둘을 동시에 쓰지 말 것
// const odd = '홀수입니다';
// const even = '짝수입니다';
// // module.exports 안에 대입했고 이파일은 모듈로 기능이 가능해진다.
// module.exports = {
// odd,
// even
// };
// * module.exports 대신 exports로 각각 대입해도 동작함
exports.odd = '홀수입니다';
exports.even = '짝수입니다';
노드의 This
this.js
console.log(this); // {}
console.log(this === module.exports); // true
console.log(this === exports); // true
function whatIsThis() {
console.log('function', this === exports, this === global); // function false true
}
whatIsThis();
최상위 스코프에 있는 this 는 module.exports(exports) 를 가르킴
function 안에 함수는 global 을 가르킨다
require
require.js
console.log('require가 가장 위에 오지 않아도 됨');
module.exports = '나를 찾아봐'
require('./var');
console.log('require.cache 이다');
console.log(require.cache);
console.log('require.main 입니다.');
console.log(require.main === module);
console.log(require.main.filenam)
require()이 최상단에 사용되지 않아도 됨
module.exports도 최하단이 아니여도 됨
그러나 상단이나 하단에 있다면 보기가 좋을 듯 하다.
- 한번 require 한 파일은 require.cache 에 저장됨
- 새로 사용할 경우 require.cache 삭제하면 됨
require.main : 노드를 실행 했을 때 첫 모듈을 가르킴
콘솔에 node node/module/require 라고 작성했고
처음 실행된 모듈이 require.js 이므로 require.main은 require.cache와 같다
현재 파일이 첫 모듈인 것을 알려면 console.log(require.main === module); 이라고 하면 알 수 있다.
(좀 어려워서 다음에 필요할때 다시 읽어야 할 듯)
순환참조 (circular dependency)
require가 서로를 참조한다면?
dep1.js
const dep2 = require('./dep2');
console.log('require dep2', dep2);
module.exports = () => {
console.log('dep2', dep2);
};
dep2.js
const dep1 = require('./dep1');
console.log('require dep1', dep1);
module.exports = () => {
console.log('dep1', dep1);
};
dep-run
const dep1 = require('./dep1');
const dep2 = require('./dep2');
dep1();
dep2();
require dep1 {}
require dep2 [Function (anonymous)]
dep2 [Function (anonymous)]
dep1 {}
.......
dep1의 객체는 빈객체가 되는데 이런 현상이 순환참조라고 한다.
에러가 없이 빈객체가 되기 때문에 서로가 서로를 require 하는 구조를 피해야 한다
'javascript, jQuery & Node.js > Node.js' 카테고리의 다른 글
노드 파일 경로 폴더 경로 / __filename, __dirname 현재 파일 경로 파일명 알기 - 노드기능 05 (0) | 2022.12.09 |
---|---|
타이머 setTimeout, setInterval, setImmediate - 노드기능 04 (0) | 2022.12.09 |
global 노드 내장 객체 console - 노드기능 03 (0) | 2022.12.09 |
모듈, 모듈화하기, 노드 모듈 - 노드기능 02 (0) | 2022.12.09 |
REPL node 사용해보기 - 노드기능 01 (0) | 2022.12.09 |