在ES6中更改导入变量的值

时间:2018-01-09 12:50:26

标签: 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;

但是在moduleB中的更改/分配时,我收到的错误如下:

  

a = 6;

     

ReferenceError:a未定义

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

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

2 个答案:

答案 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;