Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the value of imported variable in ES6

I'm using ES6 modules and am importing a variable from moduleA into moduleB:

//moduleA.js let a = 5; let b;  export { a, b };  //moduleB.js import { a, b } from './moduleA'  a = 6; b = 1; 

But on change/assignment in moduleB I'm getting error such as:

a = 6;

ReferenceError: a is not defined

On the other hand I can console.log(a) in moduleB.

It seams it is not possible to assign to imported variables? Is this true or am I missing the way to do it? Why is this not possible?

like image 751
croraf Avatar asked Jan 09 '18 12:01

croraf


People also ask

Can I use ES6 imports?

Importing can be done in various ways:Node js doesn't support ES6 import directly. If we try to use import for importing modules directly in node js it will throw out the error.

Can ES6 module have side effects?

Examples of side effects:A polyfill that enables ES6 features in the browsers that don't support them, like babel polyfill is a side effect. Many jQuery plugins attach themselves to the global jQuery object. Analytics modules that run in the background, monitor user interaction, and send the data to a server.

Does ES6 import Export?

With the help of ES6, we can create modules in JavaScript. In a module, there can be classes, functions, variables, and objects as well. To make all these available in another file, we can use export and import. The export and import are the keywords used for exporting and importing one or more members in a module.

Does ES6 import async?

ES6 modules aren't asynchronous, at least not as they are in use right now most places. Put simply, unless you're using dynamic imports (see below), each import statement runs to completion before the next statement starts executing, and the process of fetching (and parsing) the module is part of that.


1 Answers

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

is similar to

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

in that you cannot assign the value afterward. It's not quite the same because the values can change, but they can only be changed from inside the module. So you could do

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

with

import { a, setA } from "./moduleA";  setA(4); console.log(a); // 4 

From outside of a module you can mutate a value, just like you could with const, like if you're changing a property on an object, but you cannot make the variable point to an entirely different object.

like image 142
loganfsmyth Avatar answered Sep 19 '22 18:09

loganfsmyth