模塊定義文件導出類_濃縮的就是精華——ES6模塊精煉講解

1e0689d93bf8dff6765fbb6958aa97f2.png

概述

在 ES6 前, 實現模塊化使用的是 RequireJS 或者 seaJS(分別是基于 AMD 規范的模塊化庫, 和基于 CMD 規范的模塊化庫)。

ES6 引入了模塊化,其設計思想是在編譯時就能確定模塊的依賴關系,以及輸入和輸出的變量。

ES6 的模塊化分為導出(export) @與導入(import)兩個模塊。

特點

ES6 的模塊自動開啟嚴格模式,不管你有沒有在模塊頭部加上 use strict;

模塊中可以導入和導出各種類型的變量,如函數,對象,字符串,數字,布爾值,類等。

每個模塊都有自己的上下文,每一個模塊內聲明的變量都是局部變量,不會污染全局作用域。

每一個模塊只加載一次(是單例的), 若再去加載同目錄下同文件,直接從內存中讀取。

export 與 import

基本用法

模塊導入導出各種類型的變量,如字符串,數值,函數,類。

  • 導出的函數聲明與類聲明必須要有名稱(export default 命令另外考慮)。
  • 不僅能導出聲明還能導出引用(例如函數)。
  • export 命令可以出現在模塊的任何位置,但必須處于模塊頂層。
  • import 命令會提升到整個模塊的頭部,首先執行。
/*-----export [test.js]-----*/let myName = "Tom";let myAge = 20;let myfn = function(){    return "My name is" + myName + "! I'm '" + myAge + "years old."}let myClass =  class myClass {    static a = "yeah!";}export { myName, myAge, myfn, myClass } /*-----import [xxx.js]-----*/import { myName, myAge, myfn, myClass } from "./test.js";console.log(myfn());// My name is Tom! I'm 20 years old.console.log(myAge);// 20console.log(myName);// Tomconsole.log(myClass.a );// yeah!

建議使用大括號指定所要輸出的一組變量寫在文檔尾部,明確導出的接口。

函數與類都需要有對應的名稱,導出文檔尾部也避免了無對應名稱。

as 的用法

export 命令導出的接口名稱,須和模塊內部的變量有一一對應關系。

導入的變量名,須和導出的接口名稱相同,即順序可以不一致。

/*-----export [test.js]-----*/let myName = "Tom";export { myName as exportName } /*-----import [xxx.js]-----*/import { exportName } from "./test.js";console.log(exportName);// Tom使用 as 重新定義導出的接口名稱,隱藏模塊內部的變量/*-----export [test1.js]-----*/let myName = "Tom";export { myName }/*-----export [test2.js]-----*/let myName = "Jerry";export { myName }/*-----import [xxx.js]-----*/import { myName as name1 } from "./test1.js";import { myName as name2 } from "./test2.js";console.log(name1);// Tomconsole.log(name2);// Jerry

不同模塊導出接口名稱命名重復, 使用 as 重新定義變量名。

import 命令的特點

只讀屬性:不允許在加載模塊的腳本里面,改寫接口的引用指向,即可以改寫 import 變量類型為對象的屬性值,不能改寫 import 變量類型為基本類型的值。

import {a} from "./xxx.js"a = {}; // error import {a} from "./xxx.js"a.foo = "hello"; // a = { foo : 'hello' }

單例模式:多次重復執行同一句 import 語句,那么只會執行一次,而不會執行多次。import 同一模塊,聲明不同接口引用,會聲明對應變量,但只執行一次 import 。

import { a } "./xxx.js";import { a } "./xxx.js";// 相當于 import { a } "./xxx.js"; import { a } from "./xxx.js";import { b } from "./xxx.js";// 相當于 import { a, b } from "./xxx.js";

靜態執行特性:import 是靜態執行,所以不能使用表達式和變量。

import { "f" + "oo" } from "methods";// errorlet module = "methods";import { foo } from module;// errorif (true) {  import { foo } from "method1";} else {  import { foo } from "method2";}// error

export default 命令

  • 在一個文件或模塊中,export、import 可以有多個,export default 僅有一個。
  • export default 中的 default 是對應的導出接口變量。
  • 通過 export 方式導出,在導入時要加{ },export default 則不需要。
  • export default 向外暴露的成員,可以使用任意變量來接收。
var a = "My name is Tom!";export default a; // 僅有一個export default var c = "error"; // error,default 已經是對應的導出變量,不能跟著變量聲明語句 import b from "./xxx.js"; // 不需要加{}, 使用任意變量接收

復合使用

export 與 import 可以在同一模塊使用,使用特點:

  • 可以將導出接口改名,包括 default。
  • 復合使用 export 與 import ,也可以導出全部,當前模塊導出的接口會覆蓋繼承導出的。
export { foo, bar } from "methods"; // 約等于下面兩段語句,不過上面導入導出方式該模塊沒有導入 foo 與 barimport { foo, bar } from "methods";export { foo, bar }; /* ------- 特點 1 --------*/// 普通改名export { foo as bar } from "methods";// 將 foo 轉導成 defaultexport { foo as default } from "methods";// 將 default 轉導成 fooexport { default as foo } from "methods"; /* ------- 特點 2 --------*/export * from "methods";
92ffed0ef8e5fe3086a044556c99cee2.png

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

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

相關文章

關于快速開發和設計應用系統的一些個人的意見

作為程序員,經常會為我們的客戶去開發和設計各種應用系統,比如OA /CRM/物流調度/客戶服務/電子政務。。。及各種管理信息系統,我們經常會去開發和實現這樣的一些系統,每周、每月、每年經常都要去做這樣的一些開發工作,…

Jquery1.6版本后attr的變化

原文鏈接:http://www.cnblogs.com/-run/archive/2011/11/16/2251569.html Jquery1.6版本后attr的變化 Jquery1.6版本后 attr 改動后的效果: jquery1.6版本: 下文來自www.jquery.com The difference betweenattributes and properties can b…

idea main scanner 輸入_哇曬,你竟然不知道idea的 Live Templates

最近公司新近來一名程序猿,在寫代碼時,美美寫到System.out.println的時候,都要一母不差的用鍵盤敲上去,我問他你之前有用過eclipse中的快捷方法syso嗎?于是,我給他介紹了一下,在idea中如何自定義…

Android開發需要了解的 IM 知識

引言即便在通訊如此發達的今天,IM 也依然是諸多場景下非常重要的基礎能力。因此做為 一名 Android 開發,不可避免的會遇到一些IM 相關的需求或問題。本文以一個Android開發的角度來講述IM 開發相關的基礎知識。想要閱讀更多技術干貨、行業洞察&#xff0…

偷梁換柱做自己的封裝系統

偷梁換柱做自己的封裝系統!菜鳥一開始都想把自己的信息加到系統里,但封裝系統只會一點!但我們可“拿來”,我們可以用偷梁換柱的方法來修改別人的系統,本文以雨林的GHOST5.0系統為例。一、準備工作1、當然是下載一個自己…

JQuery 1.6+ checkbox 狀態選擇

示例&#xff1a; HTML: <form><table><tr><td><input type"checkbox" id"select_all"/></td></tr><tr><td><input type"checkbox" name"select[]"/></td></…

臺電u盤量產工具_簡單幾步,讓U盤起死回生

如今&#xff0c;雖說云存儲風靡&#xff0c;但U盤仍存在價值&#xff0c;畢竟在很多場合并不方便上網&#xff0c;即便如此網上存儲有時也并不方便&#xff0c;也不安全。與此同時&#xff0c;如果是大文件存儲&#xff0c;云盤上傳和下載速度非常慢&#xff0c;并不適合海量數…

PXC集群常見錯誤(一)

歡迎關注MySQL 8.0必知必會系列課程。MySQL8.0必知必會-自動化部署 https://edu.51cto.com/course/16368.htmlMySQL8.0必知必會之參數標準化配置 https://edu.51cto.com/course/16358.html1.Cant start server: Bind on TCP/IP port: Address already in use…

獲取GridView中RowCommand的當前選中行的索引或主鍵Id

獲取GridView中RowCommand的當前索引行 前臺添加一模版列,里面添加一個LinkButton前臺 (如果在后臺代碼中用e.CommandArgument取值的話前臺代碼就必須在按鈕中設置CommandArgument的值&#xff0c;值為綁定的數據庫字段<asp:TemplateField HeaderText"操作"> …

系統架構師 項目經理 哪個更有前景_中央空調加地暖與五恒系統,哪個更省錢?...

每逢嚴冬酷暑,人們都會感嘆空調是最偉大的發明,并且隨著科技發展還在不斷進化。從烤火取暖到空調和地暖的供暖,從紙扇電扇的吹風到空調的制冷,人們的需求正在不斷提高,于是,為了滿足人們的需求&#xff0c;市場上又衍生出了家裝五恒系統。 恒溫、恒濕、恒氧、恒潔、恒靜這…

軟件架構基本原則

軟件架構本質上是繪制一幅復雜素描所打的草稿&#xff0c;我還說&#xff0c;如果你罩得住&#xff0c;可以不需要這個草稿。但這只是“理論上”&#xff0c;我們寫軟件&#xff0c;基本上不是在寫只有幾千行的代碼的小程序&#xff0c;而是寫數千萬行的大型程序。《道德經》說…

Smarty目錄結構和子目錄路徑問題

原文鏈接&#xff1a;http://bbs.csdn.net/topics/80223905 問題 1).最初在模板文件中使用了絕對路徑&#xff08;相對于站點根的路徑 ).如在system_info.tpl中圖片是這樣顯示的<img src"/templates/default/images/logo.gif"/>這樣當系統發布時&#xff0c;…

c++直角坐標系與極坐標系的轉換_一篇閱讀量高達2百6十多萬的關于坐標系和投影的相關知識探討...

本文轉載于CSDN作者rsyaoxin這是一篇關于坐標和投影的「神文」截止目前瀏覽量已達2698239是相關文章中不可打破的神話...文末有本文作者推薦的兩款坐標轉換的小工具下載鏈接回想一下&#xff0c;接觸遙感專業也有幾個年頭了&#xff0c;而現在越來越偏離遙感了&#xff0c;突然…

c# xmlhttp POST提取遠程webservice數據

public string cancel(string StudentID,string Mobile){string datanull;data "<?xml version1.0 encodingutf-8?><soap:Envelope xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:soaphttp://schemas.…

Javascript實現的左右滑動菜單

原文鏈接&#xff1a;http://www.cnblogs.com/miqi2214/archive/2009/04/28/1445308.html Javascript實現的左右滑動菜單 先看Demo便于理解&#xff1a;請大家往這里看 業務需求&#xff1a; 1. 菜單個數不固定&#xff0c;當菜單個數長度小于給定范圍寬度&#xff0c;則左右移…

查詢用戶分配角色TCODE

s_bce_68001419 轉載于:https://www.cnblogs.com/yangliang/archive/2009/04/13/1434862.html

query string parameters什么意思_public static void main(String[] args) 是什么意思?(轉)...

public static void main(String[] args)&#xff0c;是java程序的入口地址&#xff0c;java虛擬機運行程序的時候首先找的就是main方法。一、這里要對main函數講解一下&#xff0c;參數String[] args是一個字符串數組&#xff0c;接收來自程度序執行時傳進來的參數。如果是在控…

經典算法:位圖排序

最近發現一個有趣的排序算法&#xff0c;通過位圖來完成排序。位圖排序其實就是基數排序&#xff0c;只不過位圖排序的下標是比特位。 問題描述 輸入&#xff1a;一個最多包含n個正整數的文件&#xff0c;每個數都小于n&#xff0c;其中n10^7。如果在輸入文件中有任何正數重復出…

PHP中刪除目錄的三種方法

原文鏈接&#xff1a;http://www.chinaz.com/program/2008/1022/41645.shtml PHP中刪除目錄的三種方法 1、遞規法&#xff1a;利用遞歸一層一層的刪。 deleteDir(&#xff04;dir) { if (rmdir(&#xff04;dir)false && is_dir(&#xff04;dir)) {if (&#xff04;d…

b樣條曲面繪制 opengl_CAD制圖軟件中如何利用EXCEL輸入坐標繪制曲線?

當在使用浩辰CAD制圖軟件繪制圖紙的過程中&#xff0c;經常要繪制由多個坐標點連接成的曲線時&#xff0c;有什么方便快捷的方法嗎&#xff1f;那當然是有的。利用EXCEL表格保存數據并與CAD制圖軟件巧妙地結合起來&#xff0c;就能很容易地畫出曲線。下面給大家詳細介紹一下吧&…