我正在使用ES6模块并将moduleA
中的变量导入moduleB
:
//moduleA.js
let a = 5;
let b;
export { a, b };
//moduleB.js
import { a, b } from './moduleA'
a = 6;
b = 1;
但是在moduleB
中的更改/分配时,我收到的错误如下:
a = 6;
ReferenceError:a未定义
另一方面,我console.log(a)
可以moduleB
。
它接缝是不可能分配到导入的变量?这是真的还是我错过了这样做的方法?为什么这不可能?
答案 0 :(得分:17)
import { a, b } from './moduleA'
类似于
const a = ...
const b = ...
因为你不能在之后分配值。它不完全相同,因为值可以更改,但它们只能从 inside 模块中更改。所以你可以做到
let a = 5;
function setA(value) {
a = value;
}
export { a, setA };
与
import { a, setA } from "./moduleA";
setA(4);
console.log(a); // 4
从模块外部,您可以改变一个值,就像使用const
一样,就像您正在更改对象上的属性一样,但是您无法进行变量指向一个完全不同的对象。
答案 1 :(得分:7)
您可以使用对象而不是变量,这样引用不会改变:
//moduleA.js
let object = {
a: 5,
};
export { object };
//moduleB.js
import { object } from './moduleA'
object.a = 6;
object.b = 1;