ES6模块导出的变量是动态只读引用:原始值变化时import值实时更新,但不可重新赋值;支持基本类型和对象类型,可修改对象属性但不能重绑定,与CommonJS的值拷贝有本质区别。

ES6 模块导出的变量是动态只读引用。
这不是简单的值拷贝,也不是运行时快照,而是在 import 时建立的一个“活链接”:它始终指向原始模块中定义的那个绑定,原始值变了,import 进来的变量也会跟着变;但你不能直接给这个 import 变量重新赋值(比如 counter = 5),因为它是只读的。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
动态性体现在哪儿
- 基本类型(如
let count = 1)和对象类型(如const obj = { a: 1 })都适用 - 修改原始模块中的变量值(如
count++或obj.a = 2),import 处读取会立即反映变化 - 不缓存、不快照,每次访问都是实时查原始模块的当前值
只读性怎么理解
-
不允许对 import 变量重新赋值:
import { count } from './a.js'; count = 10;→ 报错 -
允许修改对象属性:
import { obj } from './a.js'; obj.a = 10;→ 合法,原始模块中obj.a也变成 10 - 不能重绑定,但可以操作引用所指的内容(前提是该内容本身可变)
和 CommonJS 的关键对比
- CommonJS:
module.exports.counter = 3→require()拿到的是 3 的拷贝,后续改counter不影响已加载的值 - ES6:
export let counter = 3→import { counter }拿到的是 对 counter 的只读引用,原始改了,这里就读到新值
不复杂但容易忽略

















