官术网_书友最值得收藏!

1.5.2 模塊化

1.ES 6模塊化概述

在ES 6版本之前,JavaScript一直沒有模塊(Module)體系,無法將一個大程序拆分成互相依賴的小文件,再用簡單的方法拼裝起來。其他語言都有這項功能,比如Ruby的require、Python的import,甚至就連CSS都有@import,但是JavaScript任何這方面的支持都沒有,這對開發大型的、復雜的項目形成了巨大障礙。

好在廣大的JavaScript程序員自己制定了一些模塊加載方案,主要有CommonJS和AMD兩種。前者用于Node.js服務器,后者用于瀏覽器。

2.import和export

隨著ES 6的到來,終于原生支持了模塊化功能,即import和export,而且實現得相當簡單,完全可以取代CommonJS和AMD規范成為瀏覽器和服務器通用的模塊化解決方案。

在ES 6的模塊化系統中,一個模塊就是一個獨立的文件,模塊中的對外接口采用export關鍵字導出,可以將export放在任何變量、函數或類聲明的前面,從而將它們暴露給外部代碼使用,代碼如下:

要導出數據,在變量前面加上export關鍵字:

     export var name = "小明";
     export let age = 20;
     
     // 上面的寫法等價于下面的寫法
     
     var name = "小明";
     let age = 20;
     export {
       name:name,
       age:age
     }
     // export對象簡寫的方式
     export {name,age}

要導出函數,需要在函數前面加上export關鍵字:

     export function sum(num1,num2){
       return num1 + num2;
     }
     // 等價于
     let sum = function (num1,num2){
       return num1 + num2;
     }
     export sum

所以,如果沒有通過export關鍵字導出,在外部就無法訪問該模塊的變量或者函數。

有時會在代碼中看到使用export default,它和export具有同樣的作用,都是用來導出對外提供接口的,但是它們之間還有一些區別:

· export default用于規定模塊的默認對外接口,并且一個文件只能有一個export default,而export可以有多個。

· 通過export方式導出,在導入時要加{ },export default則不需要。

在一個模塊中可以采用import來導入另一個模塊export的內容。

導入含有多個export的內容,可以采用對象簡寫的方式,也是現在使用比較多的方式,代碼如下:

     //other.js
     var name = "小明"
     let age = 20
     // export對象簡寫的方式
     export {name,age}
     
     //import.js
     import {name,age} from "other.js"
     console.log(name) // 小明
     console.log(age) // 20

導入只有一個export default的內容,代碼如下:

     //other.js
     export default function sum(num1,num2) {
       return num1 + num2;
     }
     //import.js
     import sum from "other.js"
     console.log(sum(1,1)) // 2

有時也會在代碼中看到module.exports的用法,這種用法是從Node.js的CommonJS演化而來的,它其實就相當于:

     module.exports = xxx
     // 相當于
     export xxx

ES 6的模塊化方案使得原生JavaScript的“拆分”能力提升了一個大的臺階,幾乎成為當下最流行的寫法,并且應用在大部分的企業項目中。

主站蜘蛛池模板: 延川县| 崇左市| 深圳市| 普宁市| 黑山县| 茂名市| 河曲县| 郧西县| 浪卡子县| 夏津县| 德令哈市| 江城| 安乡县| 石柱| 克什克腾旗| 香格里拉县| 成武县| 海口市| 凤庆县| 房产| 龙游县| 胶州市| 潼南县| 甘洛县| 额济纳旗| 正阳县| 白沙| 体育| 民丰县| 柞水县| 梧州市| 龙岩市| 临朐县| 大名县| 唐山市| 清徐县| 锦屏县| 夏邑县| 翼城县| 灌阳县| 牙克石市|