export和import的書寫方式

一、導出模塊(export)

1.?命名導出(Named Exports)
// math.js
export const PI = 3.14159;                   // 導出單個常量
export function sum(a, b) { return a + b; }  // 導出單個函數
export class Calculator { /* ... */ }        // 導出單個類// 或集中導出(推薦)
const PI = 3.14159;
function sum(a, b) { /* ... */ }
class Calculator { /* ... */ }export { PI, sum, Calculator };              // 統一導出多個成員
2.?默認導出(Default Export)
// config.js
const API_KEY = '123-xyz';
export default API_KEY;                       // 默認導出一個值// 或導出匿名函數/類
export default function(a, b) { return a + b; }
export default class { /* ... */ }
3.?混合導出
// utils.js
export const VERSION = '1.0';                // 命名導出
export default function log(msg) {            // 默認導出console.log(msg);
}

二、導入模塊(import)

1.?導入命名導出
// 按名稱導入(推薦明確導入)
import { PI, sum } from './math.js';          // 導入指定成員
console.log(PI);                              // 3.14159// 別名解決命名沖突
import { sum as add } from './math.js';       // 重命名為 add// 整體導入命名空間
import * as MathUtils from './math.js';       // 全部導入為對象
console.log(MathUtils.PI);                    // 3.14159
2.?導入默認導出
// 直接導入默認值(無需大括號)
import API_KEY from './config.js';            // 默認導出的變量
import logger from './utils.js';              // 默認導出的函數// 同時導入默認和命名
import API_KEY, { VERSION } from './utils.js'; 
3.?動態導入(按需加載)
// 異步加載模塊(返回Promise)
const module = await import('./math.js');
console.log(module.PI);                       // 3.14159

三、特殊場景與技巧

1.?重新導出(Re-export)
// index.js(聚合多個模塊)
export { PI } from './math.js';               // 重新導出命名成員
export { default as Logger } from './utils.js'; // 重新導出默認成員
2.?空導入(僅執行模塊)
// 加載模塊但不導入任何內容(用于初始化)
import './init.js';                           // 執行模塊代碼
3.?循環依賴處理
// a.js
import { bFunc } from './b.js';
export function aFunc() { bFunc(); }// b.js
import { aFunc } from './a.js';
export function bFunc() { aFunc(); }

四、代碼示例

模塊拆分示例:
// 📁 src/
//   ├── utils/
//   │   ├── math.js       (命名導出)
//   │   └── logger.js     (默認導出)
//   └── app.js            (主文件)// math.js
export const PI = 3.14159;
export function circleArea(r) { return PI * r ** 2; }// logger.js
export default function (msg) { console.log(`[LOG] ${msg}`); }// app.js
import { PI, circleArea } from './utils/math.js';
import log from './utils/logger.js';log(`Area: ${circleArea(5)}`);  // [LOG] Area: 78.53975

五、注意事項

  1. 文件擴展名
    瀏覽器中需明確寫?.js,Node.js 中可省略(需配置?"type": "module")。

  2. 路徑規則

    • 相對路徑:./?或?../

    • 絕對路徑:/src/utils/math.js

    • 第三方模塊:import _ from 'lodash';

  3. 模塊作用域
    每個模塊擁有獨立作用域,var?聲明的變量不會污染全局。

  4. 兼容性
    瀏覽器需設置?<script type="module">,舊環境需通過 Webpack/Rollup 打包。


六、最佳實踐

  • 優先命名導出:明確導出內容,便于代碼維護和 Tree Shaking 優化。

  • 默認導出的場景:適用于模塊主要功能單一(如 React 組件、工具類)。

  • 路徑別名:通過構建工具配置?@/utils/math?簡化長路徑。

通過合理使用?export?和?import,可顯著提升代碼的可維護性和復用性。

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

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

相關文章

HOW - 結合 AI 進行 Tailwind 樣式開發

文章目錄 情況 1&#xff1a;使用 Tailwind CSS 與手寫傳統 CSS 的開發效率對比情況 2&#xff1a;AI Tailwind 自動生成 UI 的效率如何&#xff1f;總結 在 WHAT - Tailwind 樣式方案&#xff08;不寫任何自定義樣式&#xff09; 中我們已經簡單介紹過 Tailwind。今天主要認識…

java面試每日一背 day1

1.什么是緩存穿透 緩存穿透是指查詢一個數據庫中根本不存在的數據&#xff0c;導致這個查詢請求繞過緩存直接訪問數據庫的情況。這種情況如果頻繁發生&#xff0c;會對數據庫造成不必要的壓力。 典型特征&#xff1a; &#xff08;1&#xff09;查詢的數據在數據庫和緩存中都…

ngx_http_realip_module 模塊概述

一、使用場景 日志記錄 記錄真實客戶端 IP 而非反向代理的 IP&#xff0c;有助于流量分析和安全審計。訪問控制 基于真實 IP 實現防火墻規則&#xff08;allow/deny&#xff09;或限流&#xff0c;而非誤將上游 IP 視為客戶端。GeoIP、WAF、限速等功能 模塊化的上游真實 IP 支…

實戰5:個性化數字藝術生成與銷售

盈利思路 數字藝術銷售&#xff1a; 平臺銷售&#xff1a;將生成的數字藝術作品上傳到像OpenSea、Foundation等NFT平臺進行售賣。每一件獨特的藝術品可以通過NFT技術保證其唯一性&#xff0c;吸引收藏家和投資者。 定價策略&#xff1a;根據作品的復雜度、創意性以及市場需求來…

游戲引擎學習第303天:嘗試分開對Y軸和Z軸進行排序

成為我們自己的代碼精靈α 所以現在應該可以正常使用了。不過&#xff0c;這兩周我們沒辦法繼續處理代碼里的問題&#xff0c;而之前留在代碼里的那個問題依然存在&#xff0c;沒有人神奇地幫我們修復&#xff0c;這讓人挺無奈的。其實我們都希望有個神奇的“代碼仙子”&#…

InetAddress 類詳解

InetAddress 類詳解 一、核心作用 封裝 IP 地址&#xff1a;同時支持 IPv4 和 IPv6 地址域名解析&#xff1a;將域名轉換為 IP 地址&#xff08;DNS 查詢&#xff09;地址驗證&#xff1a;檢查網絡地址的有效性無構造方法&#xff1a;通過靜態工廠方法獲取實例 二、核心方法 …

spring cloud alibaba-Geteway詳解

spring cloud alibaba-Gateway詳解 Gateway介紹 在 Spring Cloud Alibaba 生態系統中&#xff0c;Gateway 是一個非常重要的組件&#xff0c;用于構建微服務架構中的網關服務。它基于 Spring Cloud Gateway 進行擴展和優化&#xff0c;提供了更強大的功能和更好的性能。 Gat…

iOS 直播技術及優化

iOS直播技術的實現和優化涉及多個技術環節&#xff0c;需結合協議選擇、編解碼方案、播放器技術及性能調優等多方面。 一、核心技術實現 協議選擇與傳輸優化 HLS&#xff08;HTTP Live Streaming&#xff09;&#xff1a;蘋果官方推薦&#xff0c;基于HTTP分片傳輸&#xff0c…

目標檢測135個前沿算法模型匯總(附源碼)!

目標檢測是計算機視覺核心方向之一&#xff0c;也是發論文的熱門領域&#xff01; 近來不僅YOLO算法迎來了新突破&#xff0c;迭代出YOLOv12&#xff01;Mamba、大模型等新技術的發展&#xff0c;也給該領域注入了全新的力量&#xff0c;取得了諸多顯著成果。比如性能飆升82.3…

期刊采編系統安裝升級錯誤

我們以ojs系統為例&#xff1a; PHP Fatal error: Uncaught Error: Call to a member function getId() on null in /esci/data/html/classes/install/Upgrade.inc.php:1019 Stacktrace: #0 /esci/data/html/lib/pkp/classes/install/Installer.inc.php(415): Upgrade->con…

淺談無服務器WebSocket的優勢

實際上&#xff0c;一個實用的解決方案是將構建業務關鍵型實時平臺的復雜性卸載到專門的云服務中。 完全托管的無服務器 WebSocket 解決方案為事件驅動的消息傳遞提供了基礎結構;它使底層基礎設施成為一種商品。客戶端使用提供程序服務發送/接收低延遲消息&#xff0c;并專注于…

Python數據可視化高級實戰之二——熱力圖繪制探究

目錄 一、熱力圖的作用 二、熱力圖反映的信息類型 三、熱力圖的典型應用場景 1. 地球信息系統 (GIS) 2. 城市交通分析 3. 市場分析 4. 用戶行為分析 5. 網絡流量分析 6. 傳染病傳播分析 7. 社交媒體輿情分析 四、Python 繪制熱力圖的關鍵技術要點 1. 數據預處理 2. 顏色選擇與漸…

配電網運行狀態綜合評估方法研究

1評估指標體系的構建 [1]冷華,童瑩,李欣然,等.配電網運行狀態綜合評估方法研究[J].電力系統保護與控制,2017,45(01):53-59. 1.1評估范圍 圖1為配電系統組成示意圖&#xff0c;其中A、B、C分別表示高、中、低壓配電系統。高壓配變(也稱主變)將35kV或110kV的電壓降到10kV&#…

Docker安裝MinIO對象存儲中間件

MinIO 是一個高性能、分布式的對象存儲系統&#xff0c;兼容 Amazon S3 云存儲服務協議&#xff0c;廣泛應用于企業存儲、大數據、機器學習和容器化應用等領域。以下是詳細介紹&#xff1a; 核心特點 兼容 S3 API &#xff1a;全面兼容 Amazon S3 API&#xff0c;這意味著使用…

HTML回顧

html全稱:HyperText Markup Language(超文本標記語言) 注重標簽語義,而不是默認效果 規則 塊級元素包括: marquee、div等 行內元素包括: span、input等 規則1:塊級元素中能寫:行內元素、塊級元素(幾乎什么都能寫) 規則2:行級元素中能寫:行內元素,但不能寫:塊…

JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表連查

目錄 注解總結 將傳送到客戶端的數據轉成json數據 **描述一下Spring MVC的工作流程** 1。屬性賦值 BeanUtils.copyProperties(addUserDTO,user); 添加依賴&#xff1a; spring web、mybatis framework、mysql driver Controller和ResponseBody優化 直接改成RestControl…

H2數據庫中一條insert語句到生成java對象到數據寫入磁盤的完整步驟

H2 數據庫將 SQL 語句轉換為磁盤存儲的全過程可以分為以下 8 個關鍵步驟&#xff0c;我們以 INSERT INTO users (id, name) VALUES (1, Alice) 為例詳細說明&#xff1a; 1. SQL 解析與語法樹生成 詞法分析&#xff1a;拆分語句為 INSERT、INTO、users 等 Token語法分析&#…

重磅升級!Google Play商店改版上線

5 月 21 日消息&#xff0c;Android Headline 今天&#xff08;5 月 21 日&#xff09;發布博文&#xff0c;報道稱在 2025 年 I/O 開發者大會上&#xff0c;谷歌宣布更新 Google Play 應用商店&#xff0c;在優化用戶體驗的同時&#xff0c;提升開發者收益。 本次更新中&…

Docker面試題(1)

什么是Docker 一個容器化平臺 形式是容器 將你的應用程序及所有依賴項打包在一起 確保應用程序在任何環境中無縫運行 什么是Docker鏡像 Docker鏡像是Docker容器的源代碼 用于創建容器 使用build命令創建鏡像 什么是 Docker容器 包括應用程序及所有的依賴項 作為操作系統的獨立進…

Ulisses Braga-Neto《模式識別和機器學習基礎》

模式識別和機器學習基礎 [專著] Fundamentals of pattern recognition and machine learning / (美)烏利塞斯布拉加&#xff0d;內托(Ulisses Braga-Neto)著 ; 潘巍[等]譯 推薦這本書&#xff0c;作者有自己的見解&#xff0c;而且提供代碼。問題是難度高&#xff0c;對于初學…