JavaScript ES6导出常量与导出Let

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

export const a = 1;

export let a = 1;

我知道constlet之间的区别,但当您导出它们时,它们之间有什么区别?

149629 次浏览

我认为一旦你导入了它,行为是相同的(在你的变量将在源文件之外使用的地方)。

唯一的区别是,如果您尝试在此文件结束之前重新分配它。

在ES6中,import是导出值的实时只读视图。因此,当您执行import a from "somemodule";时,无论您在模块中如何声明a,您都无法将_2分配给_ABC.

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

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


总结一下:

  • 无论在模块中如何声明相应的变量,都不能为import位变量赋值。
  • 传统
  • 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