64、js 中require和import有何區別?

在 JavaScript 中,require 和 import 都是用于模塊導入的語法,但它們屬于不同的模塊系統,具有顯著的區別:

1. 模塊系統不同

require

屬于 CommonJS 模塊系統(Node.js 默認使用)。
語法:const module = require(‘./module’)

  • 動態加載:在代碼運行時同步加載模塊。
  • 可以導入任何類型的文件(.js、.json 等)。
  • 模塊導出是對象(module.exports 或 exports)。

import

屬于 ES6 模塊系統(ECMAScript 2015+ 標準)。
語法:import module from ‘./module.js’

  • 靜態加載:在代碼解析階段(編譯時)確定依賴關系。
  • 默認支持 .js、.mjs 或通過 package.json 的 “type”: “module” 標記的文件。
  • 模塊導出是只讀的靜態綁定(導出值在編譯時確定)。

2. 加載時機

require

  • 同步加載:模塊在代碼執行到 require 時才會加載,可能阻塞后續代碼。
  • 支持條件導入(如 if (condition) { require(…) })。

import

  • 靜態加載:模塊依賴在代碼解析階段確定,無法動態導入(但可通過 import() 動態導入)。
  • 必須寫在頂層作用域(不能在條件語句或函數內使用,除非用 import())。

3. 語法差異

require

const fs = require('fs'); // 導入整個模塊
const { readFile } = require('fs'); // 解構導入

import

import fs from 'fs'; // 默認導入
import { readFile } from 'fs'; // 命名導入
import * as fs from 'fs'; // 導入所有命名導出
import fs from 'fs/promises'; // 導入子模塊(路徑需完整)

4. 動態導入

require

直接內聯使用,無需額外語法。

import

通過 import() 函數實現動態導入(返回 Promise):

const module = await import('./module.js');

5. 頂層 this 行為

require

模塊中的 this 指向 module.exports。

import

模塊中的 this 是 undefined(嚴格模式)。

6. 使用環境

require

主要用于 Node.js 環境(傳統項目),或通過 Babel/Webpack 轉譯的瀏覽器代碼。

import

現代瀏覽器原生支持(需聲明 type=“module”),Node.js 從 v12 開始也支持 ES 模塊(需文件后綴 .mjs 或 package.json 配置)。

7. 緩存機制

require

模塊首次加載后會被緩存,后續 require 直接讀取緩存。

import

同樣有緩存,但行為更嚴格(靜態分析時確定依賴)。

如何選擇?

  • Node.js 項目:傳統項目用 require,現代項目可用 import(需配置 “type”: “module”)。
  • 瀏覽器項目:優先使用 import(配合打包工具如 Webpack/Rollup)。
  • 動態加載:require 更靈活,ES 模塊用 import()。

如果需要兼容性,Babel/TypeScript 可以將 import 轉譯為 require。

在這里插入圖片描述

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

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

相關文章

Java+Access綜合測評系統源碼分享:含論文、開題報告、任務書全套資料

JAVAaccess綜合測評系統畢業設計 一、系統概述 本系統采用Java Swing開發前端界面,結合Access數據庫實現數據存儲,專為教育機構打造的綜合測評解決方案。系統包含學生管理、題庫管理、在線測評、成績分析四大核心模塊,實現了測評流程的全自…

【python】RGB to YUV and YUV to RGB

文章目錄 1、YUV2、YUV vs RGB3、RGB to YUV4、YUV to RGB附錄——YUV NV12 vs YUV NV21參考1、YUV YUV 顏色空間,又常被稱作 YCbCr 顏色空間,是用于數字電視的顏色空間,在 ITU-R BT.601、BT.709、BT.2020 標準中被明確定義,這三種標準分別針對標清、高清、超高清數字電視…

運行示例程序和一些基本操作

歡迎 ----> 示例 --> 選擇sample CTRL B 編譯代碼 CTRL R 運行exe 項目 中 Shadow build 表示是否 編譯生成文件和 源碼是否放一塊 勾上不在同一個地方 已有項目情況下怎么打開項目 方法一: 左鍵雙擊 xxx.pro 方法二: 文件菜單里面 選擇打開項目

計算機網絡第2章(下):物理層傳輸介質與核心設備全面解析

目錄 一、傳輸介質1.1 傳輸介質的分類1.2 導向型傳輸介質1.2.1 雙絞線(Twisted Pair)1.2.2 同軸電纜(Coaxial Cable)1.2.3 光纖(Optical Fiber)1.2.4 以太網對有線傳輸介質的命名規則 1.3 非導向型傳輸介質…

PHP文件包含漏洞詳解:原理、利用與防御

PHP文件包含漏洞詳解:原理、利用與防御 什么是文件包含漏洞? 文件包含漏洞是PHP應用程序中常見的安全問題,當開發者使用包含函數引入文件時,如果傳入的文件名參數未經嚴格校驗,攻擊者就可能利用這個漏洞讀取敏感文件…

5.4.2 Spring Boot整合Redis

本次實戰主要圍繞Spring Boot與Redis的整合展開,首先創建了一個Spring Boot項目,并配置了Redis的相關屬性。接著,定義了三個實體類:Address、Family和Person,分別表示地址、家庭成員和個人信息,并使用Index…

java內存模型JMM

Java 內存模型(Java Memory Model,JMM)定義了 Java 程序中的變量、線程如何和本地內存以及主內存進行交互的規則。它主要涉及到多線程環境下的共享變量可見性、指令重排等問題,是理解并發編程中的關鍵概念。 核心概念&#xff1a…

配置git命令縮寫

以下是 Git 命令縮寫的配置方法及常用方案,適用于 Linux/macOS/Windows 系統: 🔧 一、配置方法 1. 命令行設置(推薦) # 基礎命令縮寫 git config --global alias.st status git config --global alias.co che…

準確--k8s cgroup問題排查

k8s cgroup問題排查 6月 06 17:20:39 k8s-node01 containerd[1515]: time"2025-06-06T17:20:39.42902033408:00" levelerror msg"StartContainer fo r \"46ae0ef9618b96447a1f28fd2229647fe671e8acbcec02c8c46b37051130c8c4\" failed" error&qu…

Go 中 map 的雙值檢測寫法詳解

Go 中 map 的雙值檢測寫法詳解 在 Go 中,if char, exists : pairs[s[i]]; exists { 是一種利用 Go 語言特性編寫的優雅條件語句,用于檢測 map 中是否存在某個鍵。讓我們分解解釋這種寫法: 語法結構解析 if value, ok : mapVariable[key]; …

C# Wkhtmltopdf HTML轉PDF碰到的問題

最近碰到一個Html轉PDF的需求,看了一下基本上都是需要依賴Wkhtmltopdf,需要在Windows或者linux安裝這個可以后使用。找了一下選擇了HtmlToPDFCore,這個庫是對Wkhtmltopdf.NetCore簡單二次封裝,這個庫的好處就是通過NuGet安裝HtmlT…

grafana 批量視圖備份及恢復(含數據源)

一、grafana 批量視圖備份 import requests import json import urllib3 import osfrom requests.auth import HTTPBasicAuthfilename_folders_map "folders_map.json" type_folder "dash-folder" type_dashboard "dash-db"# Grafana服務器地…

.Net Framework 4/C# 關鍵字(非常用,持續更新...)

一、is 關鍵字 is 關鍵字用于檢查對象是否于給定類型兼容,如果兼容將返回 true,如果不兼容則返回 false,在進行類型轉換前,可以先使用 is 關鍵字判斷對象是否與指定類型兼容,如果兼容才進行轉換,這樣的轉換是安全的。 例如有:首先創建一個字符串對象,然后將字符串對象隱…

露亦如電 · 時之沙 | 讓遺憾在灰燼里隨風而去

注:略作重排,未整理去重。 一個人最了不起的能力:快速翻篇 原創 十點邀約作者 棠唐 2022 年 11 月 29 日 20:12 福建 《了凡四訓》有言:“從前種種,譬如昨日死;從后種種,譬如今日生。” 人生猶…

python爬蟲:Newspaper3k 的詳細使用(好用的新聞網站文章抓取和解析的Python庫)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、Newspaper3k 概述1.1 Newspaper3k 介紹1.2 主要功能1.3 典型應用場景1.4 安裝二、基本用法2.2 提取單篇文章的內容2.2 處理多篇文檔三、高級選項3.1 自定義配置3.2 分析文章情感四、實戰案例4.1 構建新聞摘要聚合器…

FastAPI安全機制:從OAuth2到JWT的魔法通關秘籍

title: FastAPI安全機制:從OAuth2到JWT的魔法通關秘籍 date: 2025/06/07 08:40:35 updated: 2025/06/07 08:40:35 author: cmdragon excerpt: FastAPI 的安全機制基于 OAuth2 規范、JWT 和依賴注入系統三大核心組件,提供了標準化的授權框架和無狀態的身份驗證。OAuth2 密碼流…

超大規模芯片驗證:基于AMD VP1902的S8-100原型驗證系統實測性能翻倍

引言&#xff1a; 隨著AI、HPC及超大規模芯片設計需求呈指數級增長原型驗證平臺已成為芯片設計流程中驗證復雜架構、縮短迭代周期的核心工具。然而&#xff0c;傳統原型驗證系統受限于單芯片容量&#xff08;通常<5000萬門&#xff09;、多芯片分割效率及系統級聯能力&#…

python電子學會三級的零碎筆記

1、join (1) .join(s)\n?&#xff1a;這種方式首先將列表s中的每個元素通過空格連接成一個字符串&#xff0c;然后在字符串末尾添加一個換行符\n。 ?示例?&#xff1a;如果s [a, b, c]&#xff0c;則 .join(s)\n的結果是a b c\n&#xff0c;寫入文件時所有元素會在一行…

TongWeb7.0動態密鑰說明

為解決TongWeb密碼硬編碼問題&#xff0c;TongWeb7.0.4.9_M5及之后版本采用動態密鑰&#xff0c;在使用過程或升級過程中可能會遇到密碼加密異常問題。對其做一個說明&#xff1a; 在TongWeb單節點情況下&#xff0c;根節點和通過domain命令建的域&#xff0c;數據源用戶名和密…

【LLMs篇】14:擴散語言模型的理論優勢與局限性

項目內容論文標題擴散語言模型的理論優勢與局限性 (Theoretical Benefit and Limitation of Diffusion Language Model)研究背景擴散語言模型&#xff08;尤其是掩碼擴散模型 MDM&#xff09;因其并行生成能力被認為有潛力超越自回歸模型&#xff0c;但其在效率-準確性上的權衡…