Javascript ES6导出const vs导出let


149

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

export const a = 1;

export let a = 1;

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


export关键字详细信息在这里。当前,任何网络浏览器都不支持它本身。
RBT

Answers:


247

在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

如您所见,差异实际上在于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


2

我认为一旦将其导入,其行为是相同的(在您的变量将在源文件外部使用的位置)。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.