JavaScript的ES6导出常量与出口让

比方说,我有一个variables,我想出口。 有什么区别

export const a = 1; 

VS

 export let a = 1; 

我明白constlet之间的区别,但是当你导出它们时,有什么区别?

在ES6中, import是对导出值的实时只读视图。 因此,当你import a from "somemodule"; ,无论您如何在模块中声明a ,都不能分配给a

但是,由于导入的variables是实时视图,因此它们会根据导出中的“原始”导出variables进行更改。 考虑下面的代码(从下面的参考文献借用):

 //------ 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 

正如你所看到的,区别在于lib.js ,而不是main1.js


总结:

  • 无论您如何在模块中声明相应的variables,都不能分配importvariables。
  • 传统的let vs- const语义适用于模块中声明的variables。
    • 如果variables被声明为const ,则不能在任何地方重新分配或反弹。
    • 如果variables声明为let ,则只能在模块中重新分配(而不是在用户)。 如果更改,则importvariables会相应更改。

参考: http : //exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values

我认为,一旦你导入它,行为是一样的(在你的variables将被用于源文件之外的地方)。

唯一的区别是如果你在这个文件结束之前尝试重新分配它。