本文收錄於 GitHub 日問: DailyQuestion,內含大廠內推機會、面經大全及若干面試題,天天學習五分鐘,一年進入大廠中。html
這是在頭條和美團面試中都問到的一個問題前端
exports
是 module.exports
的引用,相似以下所示node
const exports = module.exports
複製代碼
那以下結果會如何導出?git
module.exports = 100
exports = 3
複製代碼
很顯然會導出 100,畢竟 exports
進行了重指向。github
那在 node 源碼中如何實現的呢? 從源碼裏能夠看出 exports 的實質面試
詳見源碼: github.com/nodejs/node…,能夠看出符合猜測微信
衆所周知,node 中全部的模塊代碼都被包裹在這個函數中架構
(function(exports, require, module, __filename, __dirname) {
exports.a = 3
});
複製代碼
而如下源碼指出,exports
是如何得來app
const dirname = path.dirname(filename);
const require = makeRequireFunction(this, redirects);
let result;
// 從這裏能夠看出來 exports 的實質
const exports = this.exports;
const thisValue = exports;
const module = this;
if (requireDepth === 0) statCache = new Map();
if (inspectorWrapper) {
result = inspectorWrapper(compiledWrapper, thisValue, exports,
require, module, filename, dirname);
} else {
// 這裏是模塊包裝函數
result = compiledWrapper.call(thisValue, exports, require, module,
filename, dirname);
}
複製代碼
我是山月,正致力於天天用五分鐘可以看完的簡短答案回答一個大廠高頻面試題,可添加個人微信 shanyue94
進行交流。函數
歡迎關注公衆號【互聯網大廠招聘】,定時推送大廠內推信息及面試題簡答,天天學習五分鐘,半年進入大廠中