ES6中import與export的用法詳解

目錄

一、ES6模塊化的核心概念

1. 模塊化的基本規則

二、export的用法

1. 命名導出(Named Export)

示例:

2. 默認導出(Default Export)

示例:

默認導出函數或類:

3. 導出語句的統一聲明

示例:

三、import的用法

1. 按需導入命名成員

2. 導入默認成員

3. 同時導入命名成員和默認成員

4. 導入整個模塊

5. 重命名導入成員

四、動態導入(Dynamic Import)

1. 動態加載模塊

示例:

2. 動態導入的應用場景

五、注意事項

1. 模塊環境配置

2. 常見錯誤

六、總結


一、ES6模塊化的核心概念

1. 模塊化的基本規則

  • 一次性加載:每個模塊只會被加載一次,后續請求直接從內存中獲取。
  • 局部作用域:模塊內的變量、函數僅在模塊內部生效,不會污染全局作用域。
  • 導出(export:通過export關鍵字暴露模塊中的變量、函數或類。
  • 導入(import:通過import關鍵字從其他模塊中導入已導出的內容。

二、export的用法

1. 命名導出(Named Export)

命名導出允許在模塊中導出多個成員,導入時需使用相同的名稱。

示例:
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;// main.js
import { add, subtract } from './math.js';
console.log(add(2, 3)); // 輸出: 5
console.log(subtract(5, 2)); // 輸出: 3

?批量導出:

// utils.js
const pi = 3.14;
function multiply(a, b) { return a * b; }export { pi, multiply };// main.js
import { pi, multiply } from './utils.js';
console.log(multiply(pi, 2)); // 輸出: 6.28

2. 默認導出(Default Export)

每個模塊只能有一個默認導出,導入時可以使用任意名稱。

示例:
// user.js
const user = { name: 'Alice', age: 25 };
export default user;// main.js
import myUser from './user.js';
console.log(myUser.name); // 輸出: Alice
默認導出函數或類:
// calculator.js
export default function add(a, b) { return a + b; }// main.js
import sum from './calculator.js';
console.log(sum(3, 4)); // 輸出: 7

3. 導出語句的統一聲明

可以在模塊末尾集中導出所有成員。

示例:
// tools.js
const base = 10;
function square(n) { return n * n; }export { base, square };// main.js
import { base, square } from './tools.js';
console.log(square(base)); // 輸出: 100

三、import的用法

1. 按需導入命名成員

導入模塊中指定的命名導出。

import { add, subtract } from './math.js';
console.log(add(1, 2)); // 輸出: 3

2. 導入默認成員

直接導入模塊的默認導出。

import sum from './calculator.js';
console.log(sum(5, 5)); // 輸出: 10

3. 同時導入命名成員和默認成員

import sum, { add, subtract } from './math.js';
console.log(sum(2, 3)); // 輸出: 5
console.log(add(1, 1)); // 輸出: 2

4. 導入整個模塊

將模塊的所有導出內容作為一個對象導入。

import * as math from './math.js';
console.log(math.add(2, 3)); // 輸出: 5
console.log(math.subtract(5, 2)); // 輸出: 3

5. 重命名導入成員

通過as關鍵字避免命名沖突。

import { add as sum, subtract } from './math.js';
console.log(sum(2, 3)); // 輸出: 5

四、動態導入(Dynamic Import)

1. 動態加載模塊

import()返回一個Promise,適用于按需加載模塊。

示例:
// 動態加載模塊
import('./math.js').then(module => {console.log(module.add(2, 3)); // 輸出: 5}).catch(error => console.error('加載失敗:', error));// 使用async/await
const module = await import('./math.js');
console.log(module.add(2, 3)); // 輸出: 5

2. 動態導入的應用場景

  • 按需加載:減少初始加載時間,提升性能。
  • 條件加載:根據用戶操作或設備類型動態加載模塊。
  • 異步加載:處理大型模塊或依賴庫。

五、注意事項

1. 模塊環境配置

  • 瀏覽器環境:需在<script>標簽中添加type="module"
    <script type="module" src="main.js"></script>

  • Node.js環境:在package.json中設置"type": "module"

?

2. 常見錯誤

  • 默認導出只能有一個:每個模塊僅能使用一次export default
  • 命名沖突:導入時需注意名稱一致性,可通過as重命名。
  • 作用域限制export語句不能出現在條件語句或函數內部。

?

六、總結

ES6的exportimport為JavaScript模塊化提供了標準化的解決方案,其核心優勢在于:

  1. 代碼結構清晰:通過模塊化組織代碼,降低耦合度。
  2. 避免全局污染:模塊作用域隔離了變量和函數。
  3. 提高復用性:模塊可被多個文件共享和調用。
  4. 動態加載能力:按需加載模塊,優化性能。

通過合理使用exportimport,開發者可以構建更高效、更易維護的JavaScript應用程序。在實際開發中,建議根據項目需求靈活選擇命名導出或默認導出,并結合動態導入優化加載策略。

?

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

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

相關文章

硬核技術協同:x86 生態、機密計算與云原生等技術如何為產業數字化轉型筑底賦能

在產業數字化轉型的浪潮中&#xff0c;x86 生態構建、機密計算與 AI 融合、高性能網卡突破、云原生 OS 實踐、國產數據庫優化等技術領域的突破&#xff0c;正成為支撐數字化基礎設施升級與業務創新的核心引擎。以下從技術深度與產業實踐角度&#xff0c;系統性解析各領域的最新…

Java項目:基于SSM框架實現的網絡財務管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+遠程部署】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本網絡財務管理系統就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息…

1.5.Vue v-for 和 指令修飾符

vue v-for當你使用 v-for 指令來渲染列表時&#xff0c;為每個元素提供一個唯一的 key 屬性是非常重要的。key 是用來給 Vue 一個提示&#xff0c;以便它能夠追蹤每個節點的身份&#xff0c;從而更高效地更新虛擬 DOM。key 的作用唯一標識&#xff1a;key 應該是每項數據的唯一…

(RedmiBook)上禁用觸摸板或自帶鍵盤

在紅米筆記本&#xff08;RedmiBook&#xff09;上禁用觸摸板或自帶鍵盤&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法一&#xff1a;通過設備管理器禁用&#xff08;Windows 系統&#xff09; 禁用觸摸板 打開設備管理器 按 Win X → 選擇 “設備管理器”或 Win …

15 - 多模態大語言模型 — 圖文 “牽線” 系統 “成長記”:借 CLIP 練本領,從圖像與文字里精準 “搭鵲橋” 的全過程 (呆瓜版 - 2 號)

目錄 1、基礎&#xff1a;它到底是個啥&#xff1f; 1. 1、一句話理解核心 1.2、 為啥厲害&#xff1f; 1.3、怎么發展來的&#xff1f; 2、架構&#xff1a;它的 “身體構造” 是啥樣的&#xff1f; 2.1、視覺語言模型架構&#xff1a;讓 AI “看懂” 世界的核心系統 2…

Day 4-1: 機器學習算法全面總結

Day 4-1: 機器學習算法全面總結 ?? 學習目標 通過前三天的學習,我們已經掌握了機器學習的基礎知識和經典算法。今天我們來做一個全面總結,為進入深度學習階段做好準備。 ?? 已掌握的核心算法總結 1. 監督學習算法 1.1 回歸算法 算法 核心思想 適用場景 優缺點 線性回…

雨云深度體驗:從安利到教程再到全面評測

零、簡介在云服務市場競爭日益激烈的當下&#xff0c;各類云服務提供商如雨后春筍般涌現。然而&#xff0c;雨云卻憑借其獨特的優勢&#xff0c;在這片紅海之中逐漸嶄露頭角&#xff0c;吸引了眾多個人開發者與企業用戶的目光。接下來&#xff0c;就讓我們全方位、深層次地從安…

luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形

P13511 [KOI 2025 #1] 等腰直角三角形 - 洛谷 題目重現 題目描述 在二維平面上有 N 個不同的點。對于每個 1≤i≤N 的 i,第 i 個點的坐標為 (xi?,yi?)。 等腰三角形是指三條邊中有兩條邊長度相等的三角形。直角三角形是指一個內角為直角 (90°) 的三角形。直角三角形的斜…

Qt Quick 動畫與過渡效果

Qt Quick 提供了強大而靈活的動畫系統&#xff0c;使開發者能夠輕松創建流暢、引人入勝的用戶界面。從簡單的屬性變化到復雜的多元素協同動畫&#xff0c;Qt Quick 提供了多種實現方式。本文將深入解析 Qt Quick 動畫與過渡效果的核心技術和最佳實踐。 一、基礎動畫類型 1. 數字…

LlamaIndex 和 Elasticsearch Rerankers:無與倫比的簡潔

作者&#xff1a;來自 Elastic Jeffrey Rengifo 了解如何從 LlamaIndex RankGPT reranker 遷移到 Elastic 內置的 semantic reranker。 Elasticsearch 擁有與行業領先的 Gen AI 工具和服務商的原生集成。查看我們的網絡研討會&#xff0c;了解如何突破 RAG 基礎&#xff0c;或使…

服務器分布式的作用都有什么?

服務器分布式是通過網絡互聯的架構方式&#xff0c;將一個系統中的多臺服務器進行連接并協同工作&#xff0c;把一個服務器中的任務分發到不同的服務器節點上&#xff0c;以此來提高系統的性能、可靠性和可擴展性&#xff0c;下面&#xff0c;我們就來具體了解一下服務器分布式…

cocos打包web - ios設備息屏及前后臺切換音頻播放問題

切換前臺時&#xff0c;延遲暫停與恢復能解決大部分ios平臺前后臺切換后音頻無法恢復的問題&#xff1b; if (cc.sys.isBrowser && cc.sys.os cc.sys.OS_IOS && cc.sys.isMobile) {cc.game.on(cc.game.EVENT_GAME_INITED, () > {cc.game.on(cc.game.EVENT_…

期貨Level2五檔委托簿0.25秒高頻分鐘與日級歷史行情數據解析

在金融數據分析領域&#xff0c;本地CSV格式的期貨數據為研究人員和交易者提供了豐富的原始信息。本文將介紹如何有效利用不同類型的期貨數據&#xff0c;包括分鐘數據、高頻Tick、五檔Level2等&#xff0c;并闡述數據處理與分析方法。一、數據概述期貨分鐘數據通常包含時間戳、…

原生html+js+jq+less 實現時間區間下拉彈窗選擇器

html彈窗<div class"popupForm" id"popupForm10"><div class"pop-box"><i class"iconfont icon-quxiao cancel" onclick"toggleForm(10)"></i><div class"title">選擇時間</div…

基于邏輯回歸、隨機森林、梯度提升樹、XGBoost的廣告點擊預測模型的研究實現

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主一、項目背景與目標二、數據概覽與預處理2.1 數據導入與初步分析2.2 缺失值與重復值處理2.3 目標變量分布三、探索性數據分析&#xff08;EDA&#xff09;3.1 數值變量分布3.2 類別變量分布3…

Docker學習相關視頻筆記(三)

參考視頻地址&#xff1a;40分鐘的Docker實戰攻略&#xff0c;一期視頻精通Docker。感謝作者的辛苦付出。 本文是Docker學習相關視頻筆記&#xff08;一&#xff09;與Docker學習相關視頻筆記&#xff08;二&#xff09;的后續 4、Docker命令 4.8 Docker 網絡 4.8.1 橋接模式…

RK3568筆記九十五:基于FFmpeg和Qt實現簡易視頻播放器

若該文為原創文章,轉載請注明原文出處。 一、開發環境 1、硬件:正點原子ATK-DLRK3568 2、QT: 5.14.2 3、系統: buildroot 二、實現功能 使用ffmpeg音視頻庫軟解碼實現視頻播放器 支持打開多種本地視頻文件(如mp4,mov,avi等) 視頻播放支持實時開始,暫停,繼續播放 采…

【LLM】Kimi-K2模型架構(MuonClip 優化器等)

note Kimi K2 的預訓練階段使用 MuonClip 優化器實現萬億參數模型的穩定高效訓練&#xff0c;在人類高質量數據成為瓶頸的背景下&#xff0c;有效提高 Token 利用效率。MuonClip Optimizer優化器&#xff0c;解決隨著scaling up時的不穩定性。Kimi-K2 與 DeepSeek-R1 架構對比…

Vue基礎(25)_組件與Vue的內置關系(原型鏈)

了解組件與Vue的內置關系前&#xff0c;我們需要回顧js原型鏈基礎知識&#xff1a;1、構造函數構造函數是一種特殊的方法&#xff0c;用于創建和初始化一個新的對象。它們是使用 new 關鍵字和函數調用來創建對象的。構造函數實際上只是一個普通的函數&#xff0c;通常以大寫字母…

kafka中生產者的數據分發策略

在 Kafka 中&#xff0c;生產者的數據分發策略決定了消息如何分配到主題的不同分區。在 Python 中&#xff0c;我們通常使用 kafka-python 庫來操作 Kafka&#xff0c;下面詳細講解其數據分發策略及實現代碼。一、Kafka 生產者數據分發核心概念分區&#xff08;Partition&#…