[전단] exports 와 module. exports 의 차이
exports
와 module.exports
의 관 계 를 더욱 잘 이해 하기 위해 서, 우 리 는 먼저 js 기 초 를 보충 합 니 다.예시:app.js
var a = {name: 'nswbmw 1'}; var b = a; console.log(a); console.log(b); b.name = 'nswbmw 2'; console.log(a); console.log(b); var b = {name: 'nswbmw 3'}; console.log(a); console.log(b);
app. js 실행 결 과 는:
D:\>node app { name: 'nswbmw 1' } { name: 'nswbmw 1' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 2' } { name: 'nswbmw 3' } D:\>
설명: a 는 하나의 대상 이 고 b 는 a 에 대한 인용 입 니 다. 즉, a 와 b 는 같은 대상 을 가리 키 고 a 와 b 는 같은 메모리 주 소 를 가리 키 기 때문에 앞의 두 출력 은 같 습 니 다.b 를 수정 할 때 a 와 b 가 같은 메모리 주 소 를 가리 키 는 내용 이 바 뀌 었 기 때문에 a 도 나타 나 기 때문에 세 번 째 출력 은 같 습 니 다.b 를 완전히 덮어 쓸 때 b 는 새로운 메모리 주 소 를 가리 키 고 (원래 의 메모리 블록 을 수정 하지 않 았 습 니 다) a 는 원래 의 메모리 블록 을 가리 키 고 있 습 니 다. 즉, a 와 b 는 더 이상 같은 메모리 를 가리 키 지 않 습 니 다. 즉, 이때 a 와 b 는 이미 관계 가 없 기 때문에 마지막 두 출력 은 다 릅 니 다.
상술 한 예 를 알 게 된 후에 우 리 는 본론 으로 들 어 갔다.우 리 는 세 가지 만 알 면
exports
과 module.exports
의 차 이 를 알 수 있다.exports
가리키다 module.exports
의 인용 module.exports
초기 값 은 빈 대상 입 니 다. 그래서 {}
초기 값 도 exports
{}
돌아 온 것 은 require()
... 이 아니 라 module.exports
그래서:
우 리 는
var name = 'nswbmw'; exports.name = name; exports.sayName = function() { console.log(name); }
을 통 해 exports
에 게 값 을 부여 한 것 은 exports
이라는 빈 대상 에 게 두 개의 속성 을 추 가 했 을 뿐이다. 위의 코드 는 var name = 'nswbmw'; module.exports.name = name; module.exports.sayName = function() { console.log(name); }
에 해당 한다.우 리 는 보통 이렇게
module.exports
와 exports
간단 한 예 를 사용 하여 원 의 면적 을 계산한다. exports app. js var circle = require('./circle'); console.log(circle.area(4));
circle. js exports.area = function(r) { return r * r * Math.PI; }
를 사용 하여 module. exports app. js var area = require('./area'); console.log(area(4));
area. js module.exports = function(r) { return r * r * Math.PI; }
위의 두 가지 예 로 출력 하 는 것 이 같다.너 는 왜 이렇게 쓰 지 않 느 냐 고 물 을 지도 모른다.app. js var area = require('./area'); console.log(area(4));
area. js exports = function(r) { return r * r * Math.PI; }
가 위의 예 를 실행 하면 오류 가 발생 합 니 다.이것 은 앞의 예 에서 module.exports
에 속성 을 추가 함으로써 exports
가 가리 키 는 메모리 만 수 정 했 을 뿐 exports = function(r) { return r * r * Math.PI; }
은 사실 exports
을 덮어 씌 웠 기 때문이다. 즉, exports
새로운 메모리 (원 면적 을 계산 하 는 함수) 를 가리 키 는 것 이다. 즉, exports
와 exports
더 이상 같은 메모 리 를 가리 키 지 않 는 다. 즉, 이때 module.exports
와 exports
는 아무런 연관 이 없다. 즉, module.exports
가 가리 키 는 메모 리 는 아무런 변화 도 하지 않 고 빈 대상 module.exports
이 되 었 다. 즉, area. js 는 빈 대상 을 내 보 냈 고 우리 가 app. js 에서 area (4) 를 호출 하면 {}
의 오 류 를 보고 할 것 이다.따라서 한 마디 로 요약 하면 모듈 이 하나의 대상 으로 내 보 내 려 고 할 때 TypeError: object is not a function
와 exports
는 모두 사용 할 수 있 지만 module.exports
는 새로운 대상 으로 다시 덮어 쓸 수 없다). 우리 가 대상 이 아 닌 인 터 페 이 스 를 내 보 내 려 면 반드시 덮어 쓸 수 밖 에 없다 exports
. 우 리 는 이러한 표기 법 을 자주 본다.
exports = module.exports = somethings
위의 코드 는 module.exports = somethings exports = module.exports
원인 과 같 기 때문에 매우 간단 하 다. module.exports
는 module.exports = somethings
에 대해 덮어 씌 웠 다. 이때 module.exports
와 module.exports
의 관 계 는 끊 어 졌 고 exports
는 새로운 메모리 블록 을 가 리 켰 으 며 module.exports
는 원래 의 메모리 블록 을 가 리 켰 다. exports
와 module.exports
아니면 같은 메모 리 를 가리 키 거나 같은 '대상' 을 가리 키 기 때문에 우 리 는 exports
.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.