當多人開發同一專案時,很容易就會產生命名衝突的問題,尤其是js檔案,任何的js引入順序的打亂都可能導致專案執行失敗,為了解決命名衝突的問題,在es6之前,可以使用函式閉包來解決這個問題。
即可能像這樣:
;
(function()
//...})
()
這樣雖然可以解決命名衝突的問題,但也使得**的復用性變得極差,因為其它的檔案將無法再引用使用了函式閉包的檔案中的變數或函式。
於是,為了解決這個問題,可以像這樣:
;
var modulea =
(function()
var flag =
true
;function
num(num1,num2)
//...
obj.flag = flag
obj.num = num
return obj})
()
把要復用的屬性或函式都放入到乙個obj物件中,然後return該物件,那麼當其它js檔案想使用這些資料時,直接就可以通過 modulea.flag 等方式拿來使用。
這是早期使用的一種方法,現如今,前端模組化早已演變出了一些前端模組化開發規範,常用的有:commonjs、amd、cmd、modules(es6)
commonjs(了解)
匯出規範:
module.exports =
}
匯入規範:
let
=require
('modulea'
)
es6 模組化
在es6中使用模組化,需要在script標籤中加上type='module'
屬性。
"*.js" type=
"module"
>
<
/script>
export
的使用:
// 1、匯出模組中實現已定義過的變數
export
// 2、在匯出時定義要匯出的變數
export
let flag =
true
export
function
num(num1,num2)
export
class
person
//3、在匯出時用as指定別名
export
import
的使用:
//1、匯入指定的變數
import
from
'./js/*.js'
//2、匯入全部
import
*from
'./js/*.js'
//3、匯入時解決多檔案命名衝突問題
import
from
"./test1.js"
;import
from
"./test2.js"
;
default
:
//通過default匯出的變數可以允許匯入它的模組自定義該變數的名字,但default在乙個模組中只能使用一次
export
default sname
export
default
function()
export
default
import name from
'./js/*.js'
//匯入default不需要{},並且可以重新自定義變數名
前端模組化
前端模組化解決什麼問題?有了模組,我就可以很方便的使用別人的 想要什麼功能,就用載入什麼模組。但是,這樣做需要有乙個前提,那就是大家必須以同樣的方式編寫模組,否則就亂套了。所以組內需要有一套統一的模組規範。如何實現模組?1 物件字面量的變體 2 js設計模式的模組模式 3 採用成熟的庫檔案。前兩種方...
前端模組化
定義 具有相同屬性和行為的事物的集合 在前端中 將一些屬性比較類似和行為比較類似的內容放在同乙個js檔案裡面,把這個js檔案稱為模組 目的 為了每個js檔案只關注與自身有關的事情,讓每個js檔案各行其職 模組化 指的就是遵守commonjs規範,解決不同js模組之間相互呼叫問題 commonjs a...
前端模組化
1.前端模組化的必需性 原先只需要寫在標籤中即可 隨著 量的增多,同一程式需要有多個人來寫 我們將 組織在多個js檔案中,但會存在 全域性變數同名問題 和 js檔案的順序依賴問題 我們希望在幾個檔案中的變數可以相互關聯使用而不衝突 因此,使用模組作為出口 a.建立匿名函式 function b.在匿...