摘要:模塊化的進(jìn)程里,出現(xiàn)了很多模塊化的方案,,。隨著標(biāo)準(zhǔn)的發(fā)布,的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉(zhuǎn)碼工具使用。輸出可以看出,很重要的一個(gè)區(qū)別就是一個(gè)基本值是否會(huì)同步變化,
js模塊化的進(jìn)程里,出現(xiàn)了很多模塊化的方案,commonjs,requirejs(AMD),CMD。隨著ES6標(biāo)準(zhǔn)的發(fā)布,import/export的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉(zhuǎn)碼工具使用。ES6的模塊化和之前社區(qū)的commonjs模塊化到底有什么區(qū)別呢?
Commonjs的require和module.exportsrequire是個(gè)函數(shù),動(dòng)態(tài)加載,也因此
1.require導(dǎo)入是在運(yùn)行時(shí),理論上可以在任意地方調(diào)用require導(dǎo)入模塊;
2.require()的路徑可以是表達(dá)式:require("/app" + "/index");
require返回對(duì)應(yīng)module.exports對(duì)象的淺拷貝
1.如果是module.exports里的基本類型的值,會(huì)得到該值的副本ES6的import和export
2.如果是module.exports里的對(duì)象類型的值,會(huì)得到該值的引用
import在編譯時(shí)確定導(dǎo)入
1.路徑只能是字符串常量
2.import會(huì)被提升到文件最頂部
3.導(dǎo)入的變量是只讀的
import導(dǎo)入的是值引用,而不是值拷貝
1.模塊內(nèi)部值發(fā)生變化,會(huì)對(duì)應(yīng)影響到引用的地方
2.import導(dǎo)入與導(dǎo)出需要有一一映射關(guān)系,類似解構(gòu)賦值。
代碼說明一下兩者的區(qū)別
Commonjs
// a.js let a = 0; const count = () => { a++; } setTimeout(function(){ a++; console.log("in module the a is " + a); }, 500); module.exports = { a, count, }; // b.js let foo = require("a.js"); foo.count(); setTimeout(function(){ console.log("in require the a is " + foo.a); }, 1000); // 輸出 // in the module the a is 2 // in the require the a is 0
因?yàn)閒oo是一份淺拷貝,所以a是require導(dǎo)入時(shí)export里a的值;而count是一個(gè)函數(shù),foo.count是這個(gè)函數(shù)的一個(gè)引用,所以調(diào)用時(shí)作用域是它聲明處一樣,也就是它修改的a是exports里的,而不是foo.a。
Es6 module
// a.js let a = 0; const count = () => { a++; } setTimeout(function(){ a++; console.log("in module the a is " + a); }, 500); export { a, count, }; // b.js import { a, count } from "a.js"; count(); setTimeout(function(){ console.log("in require the a is " + a); }, 1000); // 輸出 // in the module the a is 2 // in the require the a is 2
可以看出,很重要的一個(gè)區(qū)別就是一個(gè)基本值是否會(huì)同步變化,
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/104175.html
摘要:,區(qū)別遵循的模塊化規(guī)范不一樣模塊化規(guī)范即為提供一種模塊編寫模塊依賴和模塊運(yùn)行的方案。出現(xiàn)的時(shí)間不同相關(guān)的規(guī)范由于野生性質(zhì),在年前后出生。作為的規(guī)范,一直沿用至今。這其實(shí)要感謝原來項(xiàng)目名叫做,后更名為這個(gè)神一般的項(xiàng)目。 require,import區(qū)別 遵循的模塊化規(guī)范不一樣 模塊化規(guī)范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運(yùn)行的方案。誰讓最初的 JavaScri...
摘要:提倡依賴前置,在定義模塊的時(shí)候就要聲明其依賴的模塊。適用場景按需加載條件加載動(dòng)態(tài)的模塊路徑注關(guān)于模塊化,詳細(xì)見阮一峰的入門模塊與模塊化區(qū)別模塊化的規(guī)范和兩種。 模塊化開發(fā)方便代碼的管理,提高代碼復(fù)用性,降低代碼耦合,每個(gè)模塊都會(huì)有自己的作用域。當(dāng)前流行的模塊化規(guī)范有CommonJS,AMD,CMD,ES6的import/export CommonJS的主要實(shí)踐者就是nodejs,一般...
摘要:依賴全部加載完成后,調(diào)用回調(diào)函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個(gè)模塊就是一個(gè)文件。 拋出問題: 在開發(fā)中在導(dǎo)入模塊時(shí)經(jīng)常使用require和import; 導(dǎo)出模塊時(shí)使用module.exports/exports或者export/export default; 有時(shí)候?yàn)榱艘靡粋€(gè)模塊會(huì)使用require奇怪的是也可以使用import?...
摘要:依賴全部加載完成后,調(diào)用回調(diào)函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個(gè)模塊就是一個(gè)文件。 拋出問題: 在開發(fā)中在導(dǎo)入模塊時(shí)經(jīng)常使用require和import; 導(dǎo)出模塊時(shí)使用module.exports/exports或者export/export default; 有時(shí)候?yàn)榱艘靡粋€(gè)模塊會(huì)使用require奇怪的是也可以使用import?...
閱讀 753·2025-02-07 13:40
閱讀 1060·2025-02-07 13:37
閱讀 1116·2024-11-06 13:38
閱讀 1198·2024-09-10 13:19
閱讀 1315·2024-08-22 19:45
閱讀 1494·2021-11-19 09:40
閱讀 2851·2021-11-18 13:14
閱讀 4424·2021-10-09 10:02