Javascript ES6导出const vs export let

Che*_*eng 127 javascript ecmascript-6 es6-modules

假设我有一个我要导出的变量.有什么区别

export const a = 1;
Run Code Online (Sandbox Code Playgroud)

VS

export let a = 1;
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*tus 217

在ES6中,imports是导出值的实时只读视图.因此,当您这样做时import a from "somemodule";,a无论您a在模块中如何声明,都无法分配.

但是,由于导入的变量是实时视图,因此它们会根据导出中的"原始"导出变量进行更改.请考虑以下代码(从以下参考文章中借用):

//------ 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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,差异真的在于lib.js,而不是main1.js.


总结一下:

  • import无论如何在模块中声明相应的变量,都无法分配-ed变量.
  • 传统的let-vs- const语义适用于模块中声明的变量.
    • 如果声明了变量const,则无法在任何地方重新分配或反弹.
    • 如果声明了变量let,则只能在模块中重新分配(而不是用户).如果更改,则import-ed变量会相应更改.

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