【ES6.0】-詳細模塊化、export與Import詳解

【ES6.0】-詳細模塊化、export與Import詳解

文章目錄

  • 【ES6.0】-詳細模塊化、export與Import詳解
    • 一、模塊化概述
    • 二、ES6模塊化的語法規范
    • 三、export導出模塊
      • 3.1 單變量導出
      • 3.2 導出多個變量
      • 3.3 導出函數
      • 3.4 導出對象
        • 第一種
        • 第二種:
      • 3.5 類的導出
        • 第一種
        • 第二種
    • 四、import導入模塊
      • 4.1 導入整個模塊
      • 4.2 導入單個接口
      • 4.3 導入單個接口
      • 4.4 動態導入
      • 4.5 僅為副本作用導入一個模塊
      • 五、參考

一、模塊化概述

JavaScript 程序本來很小——在早期,它們大多被用來執行獨立的腳本任務,在你的 web 頁面需要的地方提供一定交互,所以一般不需要多大的腳本。過了幾年,我們現在有了運行大量 JavaScript 腳本的復雜程序,還有一些被用在其他環境。

近年來,考慮提供一種將Javascript程序拆分為可按需導入的單獨模塊的機制。在ES6.0之前有很多Javascript庫和框架已經開始了模塊的使用如:CommonJS和基于AMD的其他模塊系統如RquireJS以及最新的Webpack和Babel。最新的瀏覽器也支持原始模塊功能。

二、ES6模塊化的語法規范

在ES6模塊中自動采用嚴格模式。規定如下:

  • 變量必須先聲明
  • 函數參數不能有同名屬性
  • 不能使用with
  • 對只讀屬性賦值、delete不可刪除屬性直接報錯
  • 不可刪除變量delete prop、只能刪除屬性delete global[prop]
  • evel不會再外層作用域有進入變量
  • evel和arguments不可重新賦值
  • arguments不會自動反應函數參數變化
  • 禁止this指向全局
  • 增加保留字:static、interface、protected等

三、export導出模塊

export語法聲明用于導出函數,對象,指定文件的原始值。

export有兩種模塊導出方式:命名導出與默認導出,命名式導出每個模塊可以多個,而默認導出每個模塊僅一個。

3.1 單變量導出

export var a=123
export const b='abc'
export let c='export demo'

3.2 導出多個變量

var a=123
const b = 'goyeer'
let c='goyeer export demo'
export {a,b,c}

3.3 導出函數

函數的導出與變量導出類似也需要添加export{函數名}

var add=function(a,b){return a+b
}
export {a}

3.4 導出對象

面向對象語言中一切皆對象,所以對象是一種數據類型,export也可以完成對象導出。對象的導出一般有兩種寫法,下面演示對象的導出:

第一種
export default{trueName:'李磊',engName:'tom',age:19
}
//導入obj.js類
//import obj from './obj.js'
//console.log(obj)
第二種:
var person = {firstName:"Bill",lastName:"Gates",age:62,eyeColor:"blue"
}
export default person

3.5 類的導出

類的導出與對象的導出類似,都是利用export default關鍵字,同樣有兩種寫法:

第一種
// person.js
export default class Person{firstName = 'Bill'lastName  = 'Gates'age       = 62eyeColor  = 'blue'show(){console.log(this.firstName)}
}

類的導入

import Person from './person.js'
let person = new Person()
person.show()
第二種
class Person{firstName = 'Bill'lastName  = 'Gates'age       = 62eyeColor  = 'blue'show(){console.log(this.firstName)}
}
//導出類
export default Person

導入類

import person from './person.js'
let person=new Person()
person.show()

四、import導入模塊

import語法用于從已導出的模塊,腳本中導入函數、對象、指定文件(或模塊)的原始值。

import模塊導入與export模塊導出功能相對應,也存在兩種模塊導入方式:命名式導入或默認式導入。

import的語法更require不同,而且import必須放在文件的最開始,且前面不允許有其他邏輯代碼,這和其他高級語言風格一致。

4.1 導入整個模塊

//導入module01的所有接口、類并制定模塊名稱為module01
import * as module01 from './modules/module01.js'
//使用時,需要通過新的模塊module01,來訪問導入文件中的成員
module01.show()

4.2 導入單個接口

// 導入單個接口
import {myExport} from '/modules/my-module.js';// 導入多個接口
import {foo, bar} from '/modules/my-module.js';// 導入接口,并制定別名,編碼時更容易使用
import {fun01 as funName} from '/modules/my-module.js';

4.3 導入單個接口

// 導入默認接口
import myDefault from '/modules/my-module.js';// 導入默認接口,也可以和其他導入方式一起使用
import myDefault, * as myModule from '/modules/my-module.js';
import myDefault, {foo, bar} from '/modules/my-module.js';

4.4 動態導入

靜態導入在頁面加載時就會被導入,有時模塊太大且不會在頁面加載時使用,可以使用動態導入,在需要用的時候在導入模塊。

// 方法一:
import('/modules/my-module.js').then((module) => {// Do something with the module.});// 方法二:
let module = await import('/modules/my-module.js');// 方法三:動態導入默認接口
(async () => {if (somethingIsTrue) {const { default: myDefault, foo, bar } = await import('/modules/my-module.js');}
})();

import標準用法是靜態模塊的導入,會使用所有被導入的模塊,在加載時被編譯(做不到按需編譯,降低頁面首次加載的速度)。在一些場景中,可以根據條件導入模塊或者按需導入模塊,此時可以使用import的動態導入功能替代靜態導入。動態導入應用場景有如下場景:

  1. 當靜態導入的模塊很明顯的降低了代碼的加載速度且被使用的可能性很低,或者并不需要馬上使用它。
  2. 當靜態導入的模塊很明顯的占用了大量系統內存且被使用的可能性很低。
  3. 當被導入的模塊,在加載時并不存在,需要異步獲取。
  4. 當導入模塊的說明符,需要動態構建。
  5. 當被導入的模塊有副作用(這里說的副作用,可以理解為模塊中會直接運行的代碼),這些副作用只有在觸發了某些條件才被需要時。(原則上來說,模塊不能有副作用,但是很多時候,你無法控制你所依賴的模塊的內容)

請不要濫用動態導入(只有在必要情況下采用),靜態框架能更好的初始化依賴,而且更有利于靜態分析工具發揮作用。

4.5 僅為副本作用導入一個模塊

整個模塊僅為副作用(中性詞,無貶義含義)而導入,而不導入模塊中的任何內容(接口)。這將運行模塊中的全局代碼,但實際上不導入任何值。

import "/modules/my-module.js";

五、參考

https://blog.csdn.net/u014724048/article/details/128938477

import - JavaScript | MDN (mozilla.org)

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

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

相關文章

FFNPEG編譯腳本

下面是一個ffmpeg編譯腳本: #!/bin/bash set -eu -o pipefail set eu o pipefailFFMPEG_TAGn4.5-dev build_path$1 git_repo"https://github.com/FFmpeg/FFmpeg.git" cache_tool"" sysroot"" c_compiler"gcc" cxx_compile…

2023年亞太地區數學建模大賽 C 題

我國新能源電動汽車的發展趨勢 新能源汽車是指以先進技術原理、新技術、新結構的非常規汽車燃料為動力來源(非常規汽車燃料指汽油、柴油以外的燃料),將先進技術進行汽車動力控制和驅動相結合的汽車。新能源汽車主要包括四種類型:…

【mybatis注解實現條件查詢】

文章目錄 步驟1: 引入MyBatis依賴步驟2: 創建數據模型步驟3: 創建Mapper接口步驟4: 配置MyBatis步驟5: 執行條件查詢 步驟1: 引入MyBatis依賴 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.x.…

MobaXterm連接節點一段時間后超時Session stopped

1、MobaXterm &#xff08;1&#xff09;設置ssh 超時時間 &#xff08;2&#xff09;設置保持連接 如果服務器端設置了超時時間&#xff0c;會以服務器為準&#xff0c;具體設置&#xff1a; 2、服務端 cat /etc/ssh/sshd_config | grep "ClientAlive" 可以把設置…

一穿一戴一世界 | 紫光展銳2023智能穿戴沙龍成功舉辦

11月23日&#xff0c;紫光展銳在深圳成功舉辦了以“一穿一戴一世界”為主題的2023智能穿戴沙龍。展銳智能穿戴沙龍已舉辦四屆&#xff0c;旨在為行業提供啟發性的觀點和前瞻性的創新理念。本屆沙龍吸引了終端廠商、行業翹楚、生態伙伴等行業各領域超過500人匯聚一堂&#xff0c…

【HTML5-webscoket實時通信(web)】

websocket是什么&#xff1f; 就是用來創建網絡聊天室&#xff0c;實時通信websocket的方法有哪些&#xff1f; https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets如何實現&#xff1a;&#xff08;以下實現流程&#xff09; 前端&#xff1a; // 直播中// 聊天web…

機器篇——決策樹(六) 細說 評估指標的交叉驗證

本小節&#xff0c;細說 評估指標的交叉驗證。 三. 評估指標 3. 交叉驗證(cross validation) (1). 概念 交叉驗證(cross validation, cv) 主要用于模型訓練或建模應用中&#xff0c;如分類預測、PCR、PLS 回歸建模等。在給定的樣本空間中&#xff0c;拿出大部分…

HCIA-RS基礎-靜態路由協議

摘要&#xff1a;靜態路由是一種在網絡中廣泛應用的路由選擇方案&#xff0c;它以其簡單的配置和低開銷而備受青睞。本文將介紹靜態路由的配置方法、默認路由的設置、路由的負載分擔和備份策略。通過學習本文&#xff0c;希望可以你能夠掌握靜態路由的基本概念和在華為模擬器中…

貪心算法個人見解

目錄 基本思想&#xff1a; 貪心算法的步驟&#xff1a; 示例&#xff1a; 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種基于貪心策略的算法范式&#xff0c;它在每一步選擇中都采取當前狀態下的最優選擇&#xff0c;而不考慮全局最優解。貪心算法通常適用于那些…

U-Boot 之九 詳解 Pinctrl 子系統、命令、初始化流程、使用方法

嵌入式芯片中,引腳復用是一個非常常見的功能,U-Boot 提供一個類似 Linux Kernel 的 Pinctrl 子系統來處理引腳復用功能。正好最近用到了這部分功能,需要移植 Pinctrl 驅動,特此記錄一下學習過程。 架構 U-Boot 提供一個類似 Linux Kernel 的 Pinctrl 子系統,用來統一各芯…

Double 4 VR智能互動教學系統在小語種課堂中的教學應用

小語種課堂一直是教育領域的一個難點。由于語言本身的復雜性和文化背景的差異&#xff0c;小語種教學一直是一個挑戰。傳統的課堂教學方法往往難以激發學生的學習興趣和動力&#xff0c;教學效果不盡如人意。而Double 4 VR智能互動教學系統為小語種課堂帶來了新的可能。 Double…

視頻服務網關的三大部署(三)

視頻網關是軟硬一體的一款產品&#xff0c;可提供多協議&#xff08;RTSP/ONVIF/GB28181/海康ISUP/EHOME/大華、海康SDK等&#xff09;的設備視頻接入、采集、處理、存儲和分發等服務&#xff0c; 配合視頻網關云管理平臺&#xff0c;可廣泛應用于安防監控、智能檢測、智慧園區…

RK WiFi部分信道在部分地區無法使用的原因

不同國家支持的WiFi信道不一樣&#xff0c;需要正確設置wificountrycode 修改路徑&#xff1a; device\rockchip\common\BoardConfig.mk 修改內容&#xff1a;androidboot.wificountrycodeXX 該屬性會被解析為 ro.boot.wificountrycode framework層會在&#xff1a; framewor…

用好語言模型:temperature、top-p等核心參數解析

編者按&#xff1a;我們如何才能更好地控制大模型的輸出? 本文將介紹幾個關鍵參數&#xff0c;幫助讀者更好地理解和運用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常見參數&#xff0c;以優化語言模型的生成效果。 文章詳細解釋了這些參數的作用…

leetcode 343.整數拆分 198.打家劫舍(動態規劃)

OJ鏈接 &#xff1a;leetcode 343.整數拆分 代碼&#xff1a; class Solution {public int integerBreak(int n) {int[] dp new int[n1];//每個n&#xff0c;拆分多個整數乘積的最大值dp [0] 0;dp [1] 1; for(int i 2 ; i<n; i){for(int j 0 ; j < i; j){dp[i] Ma…

如何看待數據確權問題?

今年8月&#xff0c;財政部發布了《關于印發<企業數據資源相關會計處理暫行規定>的通知》&#xff0c;將數據規劃到公司資產負債表的“資產”項&#xff0c;明確了哪些數據資源可以計入無形資產、存貨等資產項&#xff0c;從財務、會計處理角度對企業對數據資源享有的權利…

學習Java第52天,JDBC中statement的使用基本步驟

public class JdbcStatementQueryPart { /* * TODO: 步驟總結 (6步)* 1. 注冊驅動* 2. 獲取連接* 3. 創建statement* 4. 發送SQL語句,并獲取結果* 5. 結果集解析* 6. 關閉資源 */public static void main(String[] args) throws SQLException {//1.注冊驅動/…

小程序中的大道理--綜述

前言 以下將用一個小程序來探討一些大道理, 這些大道理包括可擴展性, 抽象與封裝, 可維護性, 健壯性, 團隊合作, 工具的利用, 可測試性, 自頂向下, 分而治之, 分層, 可讀性, 模塊化, 松耦合, MVC, 領域模型, 甚至對稱性, 香農的信息論等等. 為什么不用大程序來說大道理呢? …

CMS指紋識別方式

一、手工識別 1.robots.txt文件 robots.txt文件我們寫過爬蟲的就知道,這個文件是告訴我們哪些目錄是禁止爬取的。但是大部分的時候我們都能通過robots.txt文件來判斷出cms的類型 如: 從wp路徑可以看出這個是WordPress的cms 這個就比較明顯了直接告訴我們是PageAdmin cms 也…

Python大語言模型實戰-記錄一次用ChatDev框架實現爬蟲任務的完整過程

1、模型選擇&#xff1a;GPT4 2、需求&#xff1a;在win10操作系統環境下&#xff0c;基于python3.10解釋器&#xff0c;爬取豆瓣電影Top250的相關信息&#xff0c;包括電影詳情鏈接&#xff0c;圖片鏈接&#xff0c;影片中文名&#xff0c;影片外國名&#xff0c;評分&#x…