摘要:模塊化的進程里,出現了很多模塊化的方案,,。隨著標準的發布,的規范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉碼工具使用。輸出可以看出,很重要的一個區別就是一個基本值是否會同步變化,
js模塊化的進程里,出現了很多模塊化的方案,commonjs,requirejs(AMD),CMD。隨著ES6標準的發布,import/export的規范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉碼工具使用。ES6的模塊化和之前社區的commonjs模塊化到底有什么區別呢?
Commonjs的require和module.exportsrequire是個函數,動態加載,也因此
1.require導入是在運行時,理論上可以在任意地方調用require導入模塊;
2.require()的路徑可以是表達式:require("/app" + "/index");
require返回對應module.exports對象的淺拷貝
1.如果是module.exports里的基本類型的值,會得到該值的副本ES6的import和export
2.如果是module.exports里的對象類型的值,會得到該值的引用
import在編譯時確定導入
1.路徑只能是字符串常量
2.import會被提升到文件最頂部
3.導入的變量是只讀的
import導入的是值引用,而不是值拷貝
1.模塊內部值發生變化,會對應影響到引用的地方
2.import導入與導出需要有一一映射關系,類似解構賦值。
代碼說明一下兩者的區別
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
因為foo是一份淺拷貝,所以a是require導入時export里a的值;而count是一個函數,foo.count是這個函數的一個引用,所以調用時作用域是它聲明處一樣,也就是它修改的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
可以看出,很重要的一個區別就是一個基本值是否會同步變化,
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104175.html
摘要:,區別遵循的模塊化規范不一樣模塊化規范即為提供一種模塊編寫模塊依賴和模塊運行的方案。出現的時間不同相關的規范由于野生性質,在年前后出生。作為的規范,一直沿用至今。這其實要感謝原來項目名叫做,后更名為這個神一般的項目。 require,import區別 遵循的模塊化規范不一樣 模塊化規范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運行的方案。誰讓最初的 JavaScri...
摘要:提倡依賴前置,在定義模塊的時候就要聲明其依賴的模塊。適用場景按需加載條件加載動態的模塊路徑注關于模塊化,詳細見阮一峰的入門模塊與模塊化區別模塊化的規范和兩種。 模塊化開發方便代碼的管理,提高代碼復用性,降低代碼耦合,每個模塊都會有自己的作用域。當前流行的模塊化規范有CommonJS,AMD,CMD,ES6的import/export CommonJS的主要實踐者就是nodejs,一般...
摘要:依賴全部加載完成后,調用回調函數規范異步加載模塊規范和很相似,簡單,并與和的規范保持了很大的兼容性在規范中,一個模塊就是一個文件。 拋出問題: 在開發中在導入模塊時經常使用require和import; 導出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...
摘要:依賴全部加載完成后,調用回調函數規范異步加載模塊規范和很相似,簡單,并與和的規范保持了很大的兼容性在規范中,一個模塊就是一個文件。 拋出問題: 在開發中在導入模塊時經常使用require和import; 導出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...
閱讀 429·2024-11-06 13:38
閱讀 809·2024-09-10 13:19
閱讀 937·2024-08-22 19:45
閱讀 1386·2021-11-19 09:40
閱讀 2626·2021-11-18 13:14
閱讀 4291·2021-10-09 10:02
閱讀 2318·2021-08-21 14:12
閱讀 1286·2019-08-30 15:54