CommonJS & Asynchronous 헷갈릴 수 있는 부분 체크

조성철 (JoSworkS)·2020년 3월 2일
0

TIL(Today I Learned)

목록 보기
26/73
post-thumbnail
TR;DR
  • require()는 module.export를 반환한다.
  • exports는 module.exports를 refer하고 있으며, shortcut에 불과하다.
Q1.
var x = 10;
var mod = require('./lib/my-module.js');
var result = mod.x;

// ...and the following in lib/my-module.js:

var x = 20;
exports.x = 30;

// After subject.js runs, what will be the value of result?

exports로 x를 30으로 재할당하기 때문에 require()는 30을 반환하게 된다. 따라서 result의 값은 30이다.
A: 30

Q2.
var mod = require('./lib/my-module.js');
var result = mod.x;

// ...and the following in lib/my-module.js:

var x = 10;
exports.x = 20;
module.exports.x = 30;

// After subject.js runs, what will be the value of result?

exports는 module.exports의 숏컷에 불과하기 때문에 module.exports가 2회된 것으로 볼 수 있다. 따라서 require()는 30을 반환한다.
A: 30

Q3.
var mod1 = require('./lib/my-module.js');
var mod2 = require('./lib/my-module.js');

var result = (mod1 === mod2);

// ...and the following in lib/my-module.js:

exports.obj = { name: "Alice" };

// After subject.js runs, what will be the value of result?

require()는 같은 객체(obj)를 참조?하고 있다고 볼 수 있기 때문에 mod1과 mod2는 같다고 볼 수 있다.
A: true
(구체적인 메커니즘의 이해가 필요!)

Q4.
var mod1 = require('./lib/my-module.js');
var mod2 = require('./lib/my-module.js');

mod1.increment();
var result = mod2.increment();

// ...and the following in lib/my-module.js:

var counter = 0;
exports.increment = function () {
  counter += 1;
  return counter;
};

// After subject.js runs, what will be the value of result?

Q3과 같이 다른 변수명이어도 같은 메서드를 참조하고 있기 때문에 increment()가 2회 실행되었다.
A: 2

Q5.
var mod1 = require('./lib/my-module.js');
var mod2 = require('./lib/my-module.js');

// ...and the following in lib/my-module.js:

console.log("Loading module!");

// After subject.js runs, how many logs in the console will you see?
};

// After subject.js runs, what will be the value of result?

같은 console.log가 두 번 이루어질 것으로 생각되나, 한 번만 된다. 캐싱과 관련이 있다.
A: 1

참고자료

0개의 댓글