Javascript ES6 export const vs export let

Javascript ES6 export const vs export let

本文关键字:export let vs const Javascript ES6      更新时间:2023-09-26

假设我有一个要导出的变量。

和 的区别是什么?
export const a = 1;

export let a = 1;

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

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

然而,由于导入的变量是实时视图,它们确实会根据exports中的"原始"导出变量进行更改。考虑以下代码(从下面的参考文章中借用):
//------ 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

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

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