国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javarscript中模塊(module)、加載(load)與捆綁(bundle)詳解

2024-05-06 15:16:38
字體:
來源:轉載
供稿:網友

JS模塊簡介

js模塊化,簡單說就是將系統或者功能分隔成單獨的、互不影響的代碼片段,經過嚴格定義接口,使各模塊間互不影響,且可以為其他所用。

常見的模塊化有,C中的include (.h)文件、java中的import等。

為什么JS需要模塊

很顯然,沒有模塊我們也可以實現同樣的功能,為什么我們還要使用模塊來寫js代碼呢?下面幾點是模塊化給我們帶來的一些變化:

抽象代碼:我們在使用模塊來調用一個api時,可以不用知道內部是如何實現的,避免去理解其中復雜的代碼; 封裝代碼:在不需要再次修改代碼的前提下,我們可以在模塊內部隱藏其具體實現; 復用代碼:一些常用的、通用的功能,以模塊來實現可以避免過多的重復代碼; 管理依賴:可以通過簡單的修改依賴項來管理功能的實現,而不需要去重新修改自己內部的代碼實現。 …

ES5及之前的模塊系統

在ES5及之前版本,還沒有原生的模塊語法。不過這并不代表ES5之前,前端沒有使用模塊。簡單介紹兩種:IIFE、Revealing Module.

IIFE

Immediately Invoked Function Expression,立即執行函數表達式。

(function(){  // ... })()

看上面的代碼,IIFE可以說成是一個在定義的時候就執行的匿名函數。注意函數是先被”()”包起來了,然后后面緊跟”()”表示執行函數。如果是以下代碼,將會報錯:

function(){  console.log('test'); }() // => Uncaught SyntaxError: Unexpected token )

這種寫法表示,先定義一個匿名函數,然后再去解析”()”。由于在第一行”function”出現在首位,這表明此處定義一個函數,函數后緊跟”()”,此時表示單獨解析”()”,就會報出上面的錯誤信息,因此需要先將函數定義包裹起來。
“(function…)”這種寫法表示執行”()”內部代碼,并返回該語句執行結果,此處返回結果為該函數,后面緊跟”()”即表示執行該函數。IIFE可以幫助我們做到:

不需要了解具體的代碼實現情況下取得想要的效果; 在內部定義的變量不會污染全局作用域。

顯而易見,這種編碼方式并沒有提供良好的機制來解決依賴管理問題。

Revealing Module

根據字面暫解釋為揭示模式,與IIFE形式類似,但是提供了一個返回值。方便集中管理公有的api,使模塊、公用api更加簡潔清晰。

// Expose module as global variable var singleton = function(){  // Inner logic  function sayHello(){  console.log('Hello');  }  // Expose API  return {  sayHello: sayHello  } }()

稍微注意下,上面的代碼,我們并沒有用”()”去包裹,因為關鍵字”function”并不在該行的開頭。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 巫山县| 桂东县| 冀州市| 宜州市| 玉屏| 河间市| 万山特区| 武冈市| 东乡族自治县| 聊城市| 汝城县| 屏边| 迁安市| 会泽县| 邵东县| 临汾市| 黄浦区| 清苑县| 星子县| 潼关县| 扶沟县| 屯门区| 灵山县| 佛学| 离岛区| 双峰县| 隆回县| 祁阳县| 宣汉县| 阿勒泰市| 临汾市| 永昌县| 攀枝花市| 尉犁县| 兴文县| 精河县| 屏东县| 滁州市| 兴义市| 眉山市| 资源县|