在ES6中更改导入变量的值

cro*_*raf 21 javascript import ecmascript-6

我正在使用ES6模块并将变量moduleA导入moduleB:

//moduleA.js
let a = 5;
let b;

export { a, b };

//moduleB.js
import { a, b } from './moduleA'

a = 6;
b = 1;
Run Code Online (Sandbox Code Playgroud)

但是在改变/分配方面,moduleB我遇到了错误,例如:

a = 6;

ReferenceError:未定义a

在另一方面,我可以console.log(a)moduleB.

它接缝不可能分配给导入的变量?这是真的还是我错过了这样做的方法?为什么这不可能?

log*_*yth 26

import { a, b } from './moduleA'
Run Code Online (Sandbox Code Playgroud)

类似于

const a = ...
const b = ...
Run Code Online (Sandbox Code Playgroud)

因为你不能在之后分配值.它并不完全相同,因为值可以更改,但它们只能从模块内部更改.所以你可以做到

let a = 5;
function setA(value) {
  a = value;
}

export { a, setA };
Run Code Online (Sandbox Code Playgroud)

import { a, setA } from "./moduleA";

setA(4);
console.log(a); // 4
Run Code Online (Sandbox Code Playgroud)

从模块外部可以改变一个值,就像你可以使用const一样,就像你正在改变对象上的属性一样,但是你不能让变量指向一个完全不同的对象.


Tro*_*ers 11

您可以使用对象而不是变量,这样引用不会更改:

//moduleA.js
let object = {
    a: 5,
};

export { object };

//moduleB.js
import { object } from './moduleA'

object.a = 6;
object.b = 1;
Run Code Online (Sandbox Code Playgroud)