關于es6-module的語法

ES6(ECMAScript 2015)引入了模塊化的概念,旨在使 JavaScript 更加模塊化、可維護和可重用。ES6 模塊允許我們在不同的文件中組織和管理代碼,使得不同模塊之間的依賴關系更加清晰。

1. 導出(Export)

1.1 命名導出(Named Exports)

命名導出允許你導出多個變量、函數或類,每個導出的名稱必須是唯一的。

// file1.js
export const name = 'John';
export function greet() {console.log('Hello!');
}
export class Person {constructor(name) {this.name = name;}
}

使用命名導出時,你可以在導入時使用相同的名稱來訪問這些導出。

// file2.js
import { name, greet, Person } from './file1';
console.log(name); // John
greet();           // Hello!
const person = new Person('Jane');

1.2 默認導出(Default Export)

每個模塊只能有一個默認導出。默認導出的語法更加簡潔,可以導出一個值(如對象、函數、類等)。

js// file1.js
const person = {name: 'John',age: 30
};
export default person;

導入默認導出的方式沒有花括號。

js// file2.js
import person from './file1';
console.log(person.name); // John

1.3 導出重命名(Export Rename)

你可以在導出時使用 as 進行重命名。

js// file1.js
const firstName = 'John';
export { firstName as name };

1.4 導出合并(Export All)

你可以一次性將一個模塊的所有導出重新導出,適用于模塊間的組合。

js

// file1.js
export const name = 'John';// file2.js
export * from './file1'; // 導出 file1.js 中所有的導出

2. 導入(Import)

2.1 導入命名導出(Named Imports)

// file1.js
export const name = 'John';
export function greet() {console.log('Hello!');
}// file2.js
import { name, greet } from './file1';
console.log(name);  // John
greet();            // Hello!

2.2 導入默認導出(Default Import)

js
// file1.js
const person = { name: 'John' };
export default person;// file2.js
import person from './file1';
console.log(person.name); // John

2.3 導入重命名(Import Rename)

導入時使用 as 可以對導入的模塊進行重命名。

// file1.js
export const firstName = 'John';// file2.js
import { firstName as name } from './file1';
console.log(name); // John

2.4 導入全部(Import All)

你可以一次性導入一個模塊的所有命名導出,并將其作為一個對象使用。

// file1.js
export const name = 'John';
export const age = 30;// file2.js
import * as person from './file1';
console.log(person.name); // John
console.log(person.age);  // 30

2.5 動態導入(Dynamic Import)

ES6 模塊支持動態導入,返回一個 Promise,可以根據需要異步加載模塊。

// 動態導入
import('./file1').then(module => {console.log(module.name);
});

3. 模塊化的特點

3.1 模塊是默認嚴格模式

ES6 模塊在模塊內部默認使用嚴格模式(‘use strict’;),因此所有模塊的代碼都是嚴格模式的代碼,不需要顯式聲明。

// file1.js
x = 10; // 報錯,嚴格模式下不允許未聲明的變量

3.2 模塊的作用域

每個模塊都有自己的作用域,不會污染全局作用域。模塊之間通過 import 和 export 進行通信。

// file1.js
let counter = 0;
export function increment() {counter++;
}// file2.js
import { increment } from './file1';
increment();
console.log(counter); // 由于作用域隔離,counter 在 file2.js 中不可訪問

3.3 循環依賴

ES6 模塊系統解決了模塊間的循環依賴問題。對于導入的模塊,它會暫時處于“掛起”狀態,直到依賴的模塊加載完成。

// a.js
import { b } from './b.js';
export const a = 'a';// b.js
import { a } from './a.js';
export const b = 'b';console.log(a, b); // 輸出: a b

3.4 只讀導入

ES6 模塊中的導入是只讀的。你無法修改從模塊導入的值。

// file1.js
export let name = 'John';// file2.js
import { name } from './file1';
name = 'Jane'; // 錯誤:不能修改從模塊導入的值

4. 使用模塊

4.1 模塊在瀏覽器中的使用

現代瀏覽器支持 module 類型的腳本。使用

<script type="module">import { name } from './file1.js';console.log(name);
</script>

4.2 在 Node.js 中使用 ES6 模塊

在 Node.js 中,你需要使用 .mjs 文件擴展名或在 package.json 中設置 “type”: “module”,來啟用 ES6 模塊。

{"type": "module"
}

然后,你就可以在 Node.js 中使用 import 和 export 語法了。

// file1.mjs
export const name = 'John';// file2.mjs
import { name } from './file1.mjs';
console.log(name); // John

5. 總結

ES6 模塊引入了更簡潔的語法,使得 JavaScript 的代碼結構更加清晰和可維護。通過 import 和 export,我們可以將代碼拆分成小的模塊,按需加載,并處理依賴關系。使用 ES6 模塊化的好處包括:

  • 提高代碼的可維護性和可讀性。
  • 更好的支持循環依賴。
  • 默認嚴格模式,避免了許多常見的 JavaScript 問題。

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

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

相關文章

Chrome多開終極形態解鎖!「窗口管理工具+IP隔離插件

Web3項目多開&#xff0c;繼ads指紋瀏覽器錢包被盜后&#xff0c;更多人采用原生chrome瀏覽器&#xff0c;當然對于新手&#xff0c;指紋瀏覽器每月成本也是一筆不小開支&#xff0c;今天逛Github發現了這樣一個解決方案&#xff0c;作者開發了窗口管理工具IP隔離插件&#xff…

DeepSeek核心算法解析:如何打造比肩ChatGPT的國產大模型

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《自然語言處理原理與實戰》&#xff08;人工智能科學與技術叢書&#xff09;【陳敬雷編著】【清華大學出版社】 文章目錄 DeepSeek大模型技術系列一DeepSeek核心算法解析&#xff1a;如何…

arm 入坑筆記

1.開發環境&#xff08;IDE&#xff09;使用keil_5 (keil_mdk) 2.兩個手冊需要關注&#xff1a;用戶手冊&#xff08;編程需要&#xff09;&#xff0c;數據手冊&#xff08;硬件&#xff09; 3.32bit地址空間&#xff1a;0~2^324GB尋址空間及&#xff08;0-FFFF_FFFF&#x…

弱監督語義分割學習計劃(0)-計劃制定

經過與deepseek的一番討論和交流&#xff0c;DeepSeek為我設計了一個30天高強度學習計劃&#xff0c;重點聚焦弱監督/無監督語義分割在野外場景的應用&#xff0c;結合理論與實踐&#xff0c;并最終導向可落地的開源項目。以下是詳細計劃&#xff1a; 總體策略 優先級排序&…

vscode遠程報錯:Remote host key has changed,...

重裝了Ubuntu系統之后&#xff0c;由20.04改為22.04&#xff0c;再用vscode遠程&#xff0c;就出現了以上報錯。 親測有效的辦法 gedit ~/.ssh/known_hosts 打開這個配置文件 刪掉與之匹配的那一行&#xff0c;不知道刪哪一行的話&#xff0c;就打開第一行這個 /.ssh/confi…

Python - 爬蟲利器 - BeautifulSoup4常用 API

文章目錄 前言BeautifulSoup4 簡介主要特點&#xff1a;安裝方式: 常用 API1. 創建 BeautifulSoup 對象2. 查找標簽find(): 返回匹配的第一個元素find_all(): 返回所有匹配的元素列表select_one() & select(): CSS 選擇器 3. 訪問標簽內容text 屬性: 獲取標簽內純文本get_t…

DeepSeek驅動下的數據倉庫范式轉移:技術解耦、認知重構與治理演進

DeepSeek驅動下的數據倉庫范式轉移&#xff1a;技術解耦、認知重構與治理演進 ——基于多場景實證的架構革命研究 一、技術解耦&#xff1a;自動化編程范式的演進 1.1 語義驅動的ETL生成機制 在金融風控場景中&#xff0c;DeepSeek通過動態語法樹解析&#xff08;Dynamic Syn…

代碼隨想錄算法訓練營day38(補0206)

如果求組合數就是外層for循環遍歷物品&#xff0c;內層for遍歷背包。 如果求排列數就是外層for遍歷背包&#xff0c;內層for循環遍歷物品。 1.零錢兌換 題目 322. 零錢兌換 給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c…

golang channel底層實現?

底層數據實現 type hchan struct { qcount uint // 當前隊列中的元素數量 dataqsiz uint // 環形隊列的大小 buf unsafe.Pointer // 指向環形隊列的指針 elemsize uint16 // 元素大小 closed uint32 // chan…

圖的最小生成樹算法: Prim算法和Kruskal算法(C++)

上一節我們學習了最短路徑算法, 這一節來學習最小生成樹. 最小生成樹(Minimum Spanning Tree, MST)算法是圖論中的一種重要算法, 主要用于在加權無向圖中找到一棵生成樹, 使得這棵樹包含圖中的所有頂點, 并且所有邊的權重之和最小. 這樣的樹被稱為最小生成樹. 最小生成樹廣泛應…

矩陣系統源碼搭建的數據管理開發功能解析,支持OEM

一、引言 在矩陣系統中&#xff0c;數據猶如血液&#xff0c;貫穿整個系統的運行。高效的數據管理開發功能是確保矩陣系統穩定、可靠運行的關鍵&#xff0c;它涵蓋了數據的存儲、處理、安全等多個方面。本文將深入探討矩陣系統源碼搭建過程中數據管理功能的開發要點。 二、數據…

DeepSeek 助力 Vue 開發:打造絲滑的日期選擇器(Date Picker),未使用第三方插件

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

操作系統知識點2

1.P&#xff0c;V操作可以實現進程同步&#xff0c;進程互斥&#xff0c;進程的前驅關系 2.先來先服務調度算法是不可搶占的算法 3.UNIX操作系統中&#xff0c;對文件系統中空閑區的管理通常采用成組鏈接法 4.對于FAT32文件系統&#xff0c;它采用的是鏈接結構 5.不同的I/O…

【個人開發】deepspeed+Llama-factory 本地數據多卡Lora微調【完整教程】

文章目錄 1.背景2.微調方式2.1 關鍵環境版本信息2.2 步驟2.2.1 下載llama-factory2.2.2 準備數據集2.2.3 微調模式2.2.3.1 zero-1微調2.2.3.2 zero-2微調2.2.3.3 zero-3微調2.2.3.4 單卡Lora微調 2.2.4 實驗2.2.4.1 實驗1&#xff1a;多GPU微調-zero12.2.4.2 實驗2&#xff1a;…

iOS 中使用 FFmpeg 進行音視頻處理

在 iOS 中使用 FFmpeg 進行音視頻處理,通常需要將 FFmpeg 的功能集成到項目中。由于 FFmpeg 是一個 C 庫,直接在 iOS 中使用需要進行一些配置和封裝。 1. 在 iOS 項目中集成 FFmpeg 方法 1:使用 FFmpeg 預編譯庫 下載 FFmpeg iOS 預編譯庫: 可以從以下項目中獲取預編譯的 …

Elasticsearch:將 Ollama 與推理 API 結合使用

作者&#xff1a;來自 Elastic Jeffrey Rengifo Ollama API 與 OpenAI API 兼容&#xff0c;因此將 Ollama 與 Elasticsearch 集成非常容易。 在本文中&#xff0c;我們將學習如何使用 Ollama 將本地模型連接到 Elasticsearch 推理模型&#xff0c;然后使用 Playground 向文檔提…

openGauss 3.0 數據庫在線實訓課程18:學習視圖管理

前提 我正在參加21天養成好習慣| 第二屆openGauss每日一練活動 課程詳見&#xff1a;openGauss 3.0.0數據庫在線實訓課程 學習目標 掌握openGauss視圖的管理&#xff1a;創建視圖、刪除視圖、查詢視圖的信息、修改視圖的信息。 課程作業 1.創建表&#xff0c;創建普通視圖…

騰訊云大模型知識引擎×DeepSeek賦能文旅

騰訊云大模型知識引擎DeepSeek賦能文旅 ——以合肥文旅為例的技術革新與實踐路徑 一、技術底座&#xff1a;知識引擎與DeepSeek的融合邏輯 騰訊云大模型知識引擎與DeepSeek模型的結合&#xff0c;本質上是**“知識庫檢索增強生成&#xff08;RAG&#xff09;實時聯網能力”**…

利用SkinMagic美化MFC應用界面

MFC(Microsoft Foundation Class)應用程序的界面設計風格通常比較保守,而且雖然MFC框架的控件功能強大且易于集成,但視覺效果較為樸素,缺乏現代感。尤其是MFC應用程序的設計往往以功能實現為核心,界面設計可能顯得較為簡潔甚至略顯呆板,用戶體驗可能不如現代應用程序流暢…

qt QOpenGLTexture詳解

1. 概述 QOpenGLTexture 是 Qt5 提供的一個類&#xff0c;用于表示和管理 OpenGL 紋理。它封裝了 OpenGL 紋理的創建、分配存儲、綁定和設置像素數據等操作&#xff0c;簡化了 OpenGL 紋理的使用。 2. 重要函數 構造函數&#xff1a; QOpenGLTexture(const QImage &image,…