Javascript ES6 export const vs export let

2022-08-30 01:38:54

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

export const a = 1;

export let a = 1;

我理解 和 之间的区别,但是当您导出它们时,它们有什么区别?constlet


答案 1

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

但是,由于导入的变量是实时视图,因此它们会根据导出中的“原始”导出变量而变化。请考虑以下代码(借用自下面的参考文章):

//------ 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.jsmain1.js


总结一下:

  • 不能将 -ed 变量赋值,无论在模块中如何声明相应的变量。import
  • 传统的 -vs- 语义适用于模块中声明的变量。letconst
    • 如果变量被声明,它不能被重新赋值或反弹到任何地方。const
    • 如果变量被声明,它只能在模块中被重新分配(而不是用户)。如果更改,-ed 变量也会相应地更改。letimport

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


答案 2

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

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