javascript 模塊化機制

1. 概述

js發展初期暴露了其缺陷:缺乏模塊,后來提出了commonJS規范來規范其模塊的規范。作為JavaScript新手,發現對于其JavaScript的模塊機制,不是很理解。我查閱了一些資料整理了JavaScript CommonJS的原理和機制。

2. JavaScript

2.1 無后端的項目

這類項目不能使用CommonJS的模塊規范,這是我起初所犯的錯誤。在沒有es6被大多數瀏覽器支持的時候,js文件充斥著var和function,由此引來了命名沖突和污染,使得JavaScript代碼很復雜。es6的class概念出現有效規范了JavaScript的模塊化規范。由于這類項目只能通過script標簽引入,我們在這里講一下script標簽的相關知識。
每當瀏覽器解析到<script>標簽(無論內嵌還是外鏈)時,瀏覽器會優先下載、解析并執行該標簽中的javaScript代碼,而阻塞了其后所有頁面內容的下載和渲染。根據上述對<script>標簽特性的描述,我們知道,在該示例中,當瀏覽器解析到<script>標簽時,瀏覽器會停止解析其后的內容,而優先下載腳本文件,并執行其中的代碼,這意味著,其后的test.css樣式文件和<body>標簽都無法被加載,由于<body>標簽無法被加載,那么頁面自然就無法渲染了。因此傳統做法是
假定point.js文件:

//定義類
class Point {constructor(x, y) {this.x = x;this.y = y;}toString() {return '(' + this.x + ', ' + this.y + ')';}
}

則在index.js中引入point.js,這需要在index.html中body的尾部

<script src="point.js"></script>
<script src="index.js"></script>

這樣就可以在index.js使用point類了。
總結下來:

  1. js類庫必須在header中引入,保證對之后script引入的js文件的支持,畢竟script標簽的執行順序是順序執行,script標簽引入順序和實際引入順序相同。

  2. 自定義的script標簽引入的js文件,要放在body的尾部,保證DOM元素渲染結束。

  3. 每個js文件盡量是es6 class對象,避免作用域和命名域的沖突。

2.2 后端 服務器 NodeJS

模塊引用的實例如下:require方法

const math = require("math");

模塊的定義:
上下文提供了exports對象用于導出當前模塊方法和變量,并且它是唯一的導出出口。在模塊中,還存在一個module對象,他代表模塊自身,exports是module對象的屬性。導出方式:

// math.js
exports.add = function () { };
module.exports.add = function () { }; 

2.3 后端 es6的module

ES6模塊不是對象,而是通過export命令顯式指定輸出的代碼,輸入時也采用靜態命令的形式。
由于ES6模塊是編譯時加載,使得靜態分析成為可能。有了它,就能進一步拓寬JavaScript的語法,比如引入宏(macro)和類型檢驗(type system)這些只能靠靜態分析實現的功能。

除了靜態加載帶來的各種好處,ES6模塊還有以下好處:

  1. 不再需要UMD模塊格式了,將來服務器和瀏覽器都會支持ES6模塊格式。目前,通過各種工具庫,其實已經做到了這一點。

  2. 將來瀏覽器的新API就能用模塊格式提供,不再必要做成全局變量或者navigator對象的屬性。

  3. 不再需要對象作為命名空間(比如Math對象),未來這些功能可以通過模塊提供。

瀏覽器使用ES6模塊的語法如下:

導出對象和變量:


variables.js

var firstName = 'XXX';
var lastName = 'YYY';
export {firstName, lastName};

Point.js

// 導出類對象
export default class Point extends circle {}

引入module



import Point from "Point";

加載機制詳見:es6 module

引用資料:
高靜:js的并行加載與順序執行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言 宏定義 去除宏定義_如何檢查是否在C中定義了宏?

c語言 宏定義 去除宏定義To check whether a Macro is defined or not in C language – we use #ifdef preprocessor directive, it is used to check Macros only. 要檢查是否用C語言定義了宏 -我們使用#ifdef預處理程序指令&#xff0c;它僅用于檢查宏。 Syntax: 句法&…

多線程下不能用truncate嗎_那么多的化妝品,懷孕后都不能用了嗎?

前幾天圓夢參加了青島的美博會&#xff0c;里面的化妝品真多啊&#xff0c;無論是護膚、美白、彩妝比比皆是&#xff0c;看的人眼&#xff08;liu&#xff09;花&#xff08;lian&#xff09;繚&#xff08;wang&#xff09;亂&#xff08;fan&#xff09;。雖說國務院宣布的新…

手機html5性能測試工具,HTML5模塊?性能方面8大測試環節_小米 M3_手機硬件頻道-中關村在線...

Vellamo作為一款專攻網頁瀏覽性能測試的工具&#xff0c;在這方面的測試環節也相對復雜很多。這一部分在Vellamo的HTML5測試環節中通過14項測試來進行體現&#xff0c;而接下來我們會對著實際個測試項進行相應的介紹。See The Sun Canvas/Pixel Blender測試界面See The Sun Can…

[計算機網絡]httpserver--如何解析HTTP請求報文

這個http server的實現源代碼我放在了我的github上&#xff0c;有興趣的話可以點擊查看哦。 在上一篇文章中&#xff0c;講述了如何編寫一個最簡單的server&#xff0c;但該程序只是接受到請求之后馬上返回響應&#xff0c;實在不能更簡單。在正常的開發中&#xff0c;應該根據…

python字典副本_如何復制字典并僅在Python中編輯副本?

python字典副本Python never implicitly copies the dictionary or any objects. So, while we set dict2 dict1, were making them refer to the same dictionary object. Hence, even when we mutate the dictionary, all the references made to it, keep referring to the…

英特爾核芯顯卡控制面板沒有了_核顯和獨顯、集成顯卡有什么區別

集成顯卡&#xff1a;一般不帶有顯存&#xff0c;而是使用系統的一部分主內bai存作為顯存&#xff0c;具體的數量一般是系統根據需要自動動態調整的。顯然&#xff0c;如果使用集成顯卡運行需要大量占用內存的空間&#xff0c;對整個系統的影響會比較明顯&#xff0c;此外系統內…

徐州初中計算機學校排名2015,徐州初中學校排名,徐州重點初中排名詳細榜單

2018年徐州初中學校排名,徐州重點初中排名詳細榜單孩子小升初&#xff0c;幾乎所有的家長都會陷入糾結&#xff0c;都想為孩子選擇一所“好學校”&#xff0c;在擇校過程中&#xff0c;家長們總想知道徐州初中學校排名以及徐州重點初中排名詳細榜單&#xff0c;但這里小編提醒一…

分布式計算 MapReduce與yarn工作機制

一、第一代hadoop組成與結構第一代Hadoop&#xff0c;由分布式存儲系統HDFS和分布式計算框架MapReduce組成&#xff0c;其中&#xff0c;HDFS由一個NameNode和多個DataNode組成&#xff0c;MapReduce由一個JobTracker和多個TaskTracker組成&#xff0c;對應Hadoop版本為Hadoop …

c++ stl隊列初始化_創建一個向量,并將其像C ++ STL中的數組一樣初始化

c stl隊列初始化向量是什么&#xff1f; (What is the vector?) Vector is a container in C STL, it is used to represent array and its size can be changed. Vector是C STL中的一個容器&#xff0c;用于表示數組&#xff0c;并且其大小可以更改。 Read more: C STL Vec…

計算機無法上無線網絡連接到internet,電腦連接不上無線網絡,教您怎么解決電腦連接不上無線網絡...

小編家的那位筆記本姐姐之前可能是受委屈了&#xff0c;一個一個的電腦問題丟出來給我解決。之前有段時間總是出現電腦連接不上無線網絡的問題&#xff0c;弄得那短時間天天都在想辦法是解決。現在&#xff0c;我就要將這種解決方法分享給你們&#xff0c;讓你們在遇到這個問題…

格蘭杰因果關系檢驗_混頻(mixed frequency)數據的格蘭杰因果(Grange causality)檢驗及其Matlab實現...

格蘭杰和格蘭杰因果網絡搜到的Grange大神標準照格蘭杰1934年9月出生于英國威爾士的斯旺西&#xff0c;早期就讀于諾丁漢大學&#xff0c;接受當時英國第一個經濟學數學雙學位教育&#xff0c;1955年留校任教&#xff0c;1957年在天文學雜志上他發表了第一篇論文&#xff1a;“關…

C#Convert.ToInt32(byte)方法-將字節值轉換為int

C&#xff03;Convert.ToInt32(byte)方法 (C# Convert.ToInt32(byte) Method) Convert.ToInt32(byte) Method is used to convert a specific byte value to its equivalent integer (int 32 signed number). Convert.ToInt32(byte)方法用于將特定的字節值轉換為其等效的整數(i…

后臺窗口截圖_萬人擁捧的截圖軟件來啦!讓你的工作效率提升不止一倍!

文章來自微信公眾號&#xff1a;小七有料直接進入正題&#xff0c;今天不野給大家分享兩款截圖軟件——Snipaste和FastStone Capture&#xff0c;前者與其說是一個截圖軟件&#xff0c;我更愿意稱之為貼圖軟件。兩者都在工作中很大程度提高了我的效率&#xff0c;也簡便化了我很…

ibm nvidia 超級計算機,IBM,Nvidia和美國能源部組成一個超級計算機超級團隊

CNET技術信息網7月15日國際報道: IBM將與Nvidia和美國能源部合作建立兩個新的杰出超級計算機中心. 這項合作的工作主要集中在兩個方面&#xff0c;一個是確保應用程序可以充分利用超級計算機的強大性能&#xff0c;另一個是收集開發人員&#xff0c;工程師和科學家的反饋.這兩個…

C#Convert.ToInt32(char)方法-將char值轉換為int

C&#xff03;Convert.ToInt32(char)方法 (C# Convert.ToInt32(char) Method) Convert.ToInt32(char) Method is used to convert a specific char value to its equivalent integer (int 32 signed number) (It can also be known as ASCII value). Convert.ToInt32(char)方法…

華為p40論壇_華為高端旗艦繼續發力!麒麟990 5G+超感知三攝,256GB降價799元

小米10、一加8&#xff0c;vivo NEX3S等高性能旗艦產品現已在市場上發售。其中&#xff0c;5G旗艦華為P40也在銷售團隊中&#xff0c;并且最近成為最受歡迎的旗艦產品。由于華為P40高端版從799元跌至4189元&#xff0c;消費者可以以不到800元的價格購買低價高性能旗艦產品&…

計算機基礎.doc,大學生計算機基礎.doc

WORD格式 整理分享范文范例 參考指導電子計算機的誕生1計算機的發展經歷了4個時代&#xff0c;各個時代劃分的原則是根據( )。A、計算機所采用的電子器件B、計算機的運算速度C、程序設計語言D、計算機的存儲量正確答案&#xff1a;A?2世界上第一臺電子計算機誕生于( )年。A、1…

移動端類似IOS的滾動年月控件(需要jQuery和iScroll)

http://www.cnblogs.com/ccblogs/p/5260949.html 一. 效果圖 二. 功能介紹 支持滾動和點擊選擇年月。&#xff08;目前只支持設置年月的最大最小值&#xff0c;不支持整體的最大最小值&#xff09; 三. 代碼 1. 在你的html中添加如下代碼&#xff1a; 直接加載<body>里面…

css 橫向滾動隱藏滾動條_使用CSS滾動時如何隱藏滾動條?

css 橫向滾動隱藏滾動條Introduction: 介紹&#xff1a; It is always nice to have a responsive website or web page, to create such websites or web pages we have to make use of our developing skills to a great extent to bring about the functionality as well a…

DrawerLayout側滑詳解

前面我們說了自定義側滑菜單&#xff0c;也說了SlidingMenu的使用&#xff0c;這一節我們再來說下DrawerLayout。DrawerLayout是Support Library包中實現了側滑菜單效果的控件&#xff0c;可以說DrawerLayout是因為第三方控件如SlidingMenu等出現之后&#xff0c;google借鑒而出…