In ES6, import
s are live read-only views on exported-values. As a result, when you do import a from "somemodule";
, you cannot assign to a
no matter how you declare a
in the module.
However, since imported variables are live views, they do change according to the "raw" exported variable in exports. Consider the following code (borrowed from the reference article below):
//------ lib.js ------
export let counter = 3;
export function incCounter() {
counter++;
}
//------ main1.js ------
import { counter, incCounter } from './lib';
// The imported value `counter` is live
console.log(counter); // 3
incCounter();
console.log(counter); // 4
// The imported value can’t be changed
counter++; // TypeError
As you can see, the difference really lies in lib.js
, not main1.js
.
To summarize:
- You cannot assign to
import
-ed variables, no matter how you declare the corresponding variables in the module.
- The traditional
let
-vs-const
semantics applies to the declared variable in the module.
- If the variable is declared
const
, it cannot be reassigned or rebound in anywhere.
- If the variable is declared
let
, it can only be reassigned in the module (but not the user). If it is changed, the import
-ed variable changes accordingly.
Reference:
http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…