javascript模块是什么_如何使用import和export?
发布时间 - 2026-01-10 00:00:00 点击率:次JavaScript模块是语言级机制,需显式声明type="module"或满足Node.js条件;export/import非语法糖,有命名/默认导出之分;路径须带扩展名或为绝对/相对URL;动态import()返回Promise;循环依赖时未执行完的导出为undefined。
JavaScript 模块就是把代码按功能拆成独立、可复用的文件,每个文件默认拥有自己的作用域,import 和 export 是声明依赖与暴露接口的唯一标准方式——不是语法糖,是语言级机制,不加 type="module" 或没配对的 export/import 会直接报错。
模块文件必须显式声明为 module 才生效
浏览器中, 标签默认是传统脚本,import/export 会报 Uncaught SyntaxError: Cannot use import statement outside a module。必须写成:
Node.js 中则需满足任一条件:.mjs 后缀、package.json 中设置 "type": "module",或用 node --input-type=modu 运行字符串。混用
lerequire() 和 import 会导致 ERR_REQUIRE_ESM 错误。
export 有命名导出和默认导出两种形式
命名导出适合暴露多个值(函数、类、常量),导入时名称必须一致;默认导出只能有一个,导入时可自定义名称。两者不能混在同一个 export 语句里。
- 命名导出:
export const PI = 3.14;、export function add(a, b) { return a + b; } - 默认导出:
export default function multiply(a, b) { return a * b; }(注意:不能用function multiply() {}单独声明再export default multiply,除非是变量赋值形式) - 批量重导出:
export { add as sum, PI } from './math.js';,但不会提升原始模块的执行时机
import 路径必须带扩展名或为绝对/相对 URL
ES 模块的 import 不支持 Node.js 那样的自动扩展名解析(如省略 .js)。以下写法在浏览器中全部非法:
import { add } from './math'; // ❌ 缺少扩展名
import { add } from 'lodash'; // ❌ 不是相对/绝对路径,也不是 bare specifier(需构建工具或导入映射支持)合法写法包括:
import { add } from './math.js';import utils from './utils.mjs';-
import { render } from 'https://cdn.skypack.dev/react@18';(需环境支持 bare specifier)
动态 import() 是函数调用,返回 Promise,可传入变量路径,且不受静态分析限制,但无法在顶层用 await 替代(需包在 async 函数内)。
循环依赖时模块只执行一次,未执行完的部分是 undefined
如果 a.js 导入 b.js,而 b.js 又导入 a.js,V8 会缓存已初始化但未执行完的模块对象。此时 b.js 中访问 a.js 的命名导出,可能得到 undefined,尤其是导出的是 let 或 const 声明的值(尚未初始化)。
规避方法:
- 把相互依赖的逻辑提到第三个模块中统一导出
- 用默认导出函数代替直接导出变量(函数体延迟执行)
- 避免在模块顶层直接读取对方导出的非函数值
模块加载顺序由依赖图决定,不是文件书写顺序;import 语句位置不影响执行时机——所有 import 都在模块执行前完成解析和预加载。
# react
# javascript
# java
# js
# node.js
# json
# node
# 浏览器
# 工具
# ai
# cdn
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
C++时间戳转换成日期时间的步骤和示例代码
bing浏览器学术搜索入口_bing学术文献检索地址
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
如何在自有机房高效搭建专业网站?
如何用PHP工具快速搭建高效网站?
js代码实现下拉菜单【推荐】
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
简单实现Android文件上传
实例解析angularjs的filter过滤器
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何使用Eloquent进行子查询
MySQL查询结果复制到新表的方法(更新、插入)
如何快速生成可下载的建站源码工具?
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
如何基于云服务器快速搭建个人网站?
如何快速配置高效服务器建站软件?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
html如何与html链接_实现多个HTML页面互相链接【互相】
如何在 Pandas 中基于一列条件计算另一列的分组均值
用yum安装MySQLdb模块的步骤方法
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
公司网站制作需要多少钱,找人做公司网站需要多少钱?
深圳网站制作的公司有哪些,dido官方网站?
如何在万网ECS上快速搭建专属网站?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Android 常见的图片加载框架详细介绍
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
详解jQuery中基本的动画方法
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Android利用动画实现背景逐渐变暗
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何用已有域名快速搭建网站?
如何在万网主机上快速搭建网站?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel如何实现用户密码重置功能?(完整流程代码)
Python并发异常传播_错误处理解析【教程】
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何记录自定义日志?(Log频道配置)
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何快速生成凡客建站的专业级图册?
如何在 React 中条件性地遍历数组并渲染元素
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)

