js中import和require的區別


js中import和require的區別
ES6標准發布后,module成為標准,標准使用是以export指令導出接口,以import引入模塊。但是在我們一貫的node模塊中,我們依然采用的是CommonJS規范,使用require引入模塊,使用module.exports導出接口。

require
它相當於module.exports的傳送門,module.exports后面的內容是什么,require的結果就是什么,對象、數字、字符串、函數……再把require的結果賦值給某個變量,相當於把require和module.exports進行平行空間的位置重疊。

require理論上可以運用在代碼的任何地方,甚至不需要賦值給某個變量之后再使用。

require('./a')(); // a模塊是一個函數,立即執行a模塊函數
var data = require('./a').data; // a模塊導出的是一個對象
import
impor它是編譯時的(require是運行時的),它必須放在文件開頭,而且使用格式也是確定的,不容置疑。它不會將整個模塊運行后賦值給某個變量,而是只選擇import的接口進行編譯,這樣在性能上比require好很多。require是賦值過程,import是解構過程

require 和 import的區別
require引入基礎數據類型時,屬於復制該變量

require引入復雜數據類型時,數據淺拷貝該對象

出現模塊之間的循環引用時,會輸出已經執行的模塊,而未執行的模塊不輸出

CommonJS模塊默認export的是一個對象,即使導出的是基礎數據類型

require中 exports 和 module.exports 的區別
module.exports 初始值為一個空對象 {}

exports 是指向的 module.exports 的引用

require() 返回的是 module.exports 而不是 exports

即 module.exports 指向新的對象時,exports 斷開了與 module.exports 的引用,那么通過 exports = module.exports 讓 exports 重新指向 module.exports 即可。
---------------------
版權聲明:本文為CSDN博主「huhanghao」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011486491/article/details/90265901


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM