【问题标题】:Change the value of imported variable in ES6更改 ES6 中导入变量的值
【发布时间】:2018-06-18 12:17:53
【问题描述】:

我正在使用 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 未定义

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

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

【问题讨论】:

  • 在 ES6 中,导入是导出值的实时只读视图。 stackoverflow.com/a/32558929/2894798
  • @RenzoCC 您应该使用它作为参考发布答案,因为这两个问题有点不同,它不是重复的
  • 没有注意的是,如果 a 或 b(在我的示例中)是一个对象,您可以从任何模块对其进行变异。您显然不能做的是重新分配 a 和 b 变量。我说的对吗?

标签: javascript import ecmascript-6


【解决方案1】:

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

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

export { object };

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

object.a = 6;
object.b = 1;

【讨论】:

  • 谢谢。我已经在使用这种方法。或者如其他答案所述,使用位于 moduleA 中的 setter 函数。我认为已确认重新分配其他模块的导出存在限制。不知道为什么其他答案被删除了。
【解决方案2】:
import { a, b } from './moduleA'

类似于

const a = ...
const b = ...

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

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

export { a, setA };

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

setA(4);
console.log(a); // 4

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多