Node 中 exports 與 module.exports 有什麼區別

本文收錄於 GitHub 日問: DailyQuestion,內含大廠內推機會、面經大全及若干面試題,天天學習五分鐘,一年進入大廠中。html

這是在頭條和美團面試中都問到的一個問題前端

exportsmodule.exports 的引用,相似以下所示node

const exports = module.exports
複製代碼

那以下結果會如何導出?git

module.exports = 100
exports = 3
複製代碼

很顯然會導出 100,畢竟 exports 進行了重指向。github

那在 node 源碼中如何實現的呢? 從源碼裏能夠看出 exports 的實質面試

module wrapper

詳見源碼: 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 進行交流。函數

歡迎關注公衆號【互聯網大廠招聘】,定時推送大廠內推信息及面試題簡答,天天學習五分鐘,半年進入大廠中

天天五分鐘,半年大廠中
相關文章
相關標籤/搜索