es modules允许一个模块同时有且仅有一个默认导出和多个命名导出;导入时必须严格匹配类型:默认导入用import x from,命名导入用import {a, b} from,混合使用为import x, {a, b} from。

ES Modules 支持默认导出(export default)和命名导出(export const/name/function/...)共存,但导入时需注意语法匹配——不能用默认导入语法接收命名导出,也不能用命名导入解构默认值。关键在于:**一个模块可以同时有且仅有一个默认导出,以及任意多个命名导出;导入方式必须与导出类型严格对应。**
导出:默认 + 命名可并存
一个模块文件(如 math.js)可以这样混合导出:
export const PI = 3.14159;
export function add(a, b) {
return a + b;
}
export default function multiply(a, b) {
return a * b;
}
✅ 合法:默认导出是函数,同时导出两个命名绑定(PI 和 add)。
⚠️ 注意:export default 只能出现一次,重复会报错;命名导出的名称必须是合法标识符,不能是字符串或表达式。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
导入:按需选择默认 or 命名语法
导入时要根据你想用的内容,选用不同语法:
- 只用默认导出 → 使用默认导入:
import multiply from './math.js'; - 只用命名导出 → 使用命名导入:
import { PI, add } from './math.js'; - 默认 + 命名都要用 → 组合写法(默认导入 + 命名解构):
import multiply, { PI, add } from './math.js'; - 想把整个模块作为命名空间对象 → 使用
import * as:import * as math from './math.js';
此时math.default指向默认导出,math.PI和math.add指向命名导出。
常见误区与修复
容易出错的地方集中在导入侧:
- ❌ 错误:用大括号导入默认导出
import { default as multiply } from './math.js';—— 语法虽不报错,但语义混乱,不推荐;更糟的是写成import { multiply } from './math.js'(假设模块没导出名为multiply的命名绑定,就会报undefined)。 - ❌ 错误:在命名导入中漏掉
default别名却想访问默认值import { PI, add } from './math.js'; console.log(default);——default不是变量名,不会自动注入作用域。 - ✅ 正确做法:明确区分用途。如果需要同时使用,默认导入放前面,命名导入跟在后面,用逗号分隔。
重命名与聚合导出也兼容混合模式
你还可以在导出时做重命名或重新聚合,不影响混合逻辑:
// utils.js
export { PI as PI_VALUE, add as sum } from './math.js';
export { default as calcMultiply } from './math.js'; // 重命名默认导出
export default function greet() { return 'Hello'; }
这个模块现在有自己的默认导出(greet),又从 math.js 重新导出了命名项和重命名后的默认项。导入时依然遵循前述规则即可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










