【发布时间】:2015-12-10 02:00:29
【问题描述】:
假设我有一个要导出的变量。有什么区别
export const a = 1;
对
export let a = 1;
我了解const和let之间的区别,但是当你导出它们时,它们有什么区别?
【问题讨论】:
-
export关键字详细信息here。目前,任何网络浏览器都不支持它。
标签: javascript ecmascript-6 es6-modules
假设我有一个要导出的变量。有什么区别
export const a = 1;
对
export let a = 1;
我了解const和let之间的区别,但是当你导出它们时,它们有什么区别?
【问题讨论】:
export 关键字详细信息here。目前,任何网络浏览器都不支持它。
标签: javascript ecmascript-6 es6-modules
我认为一旦你导入它,行为是相同的(在你的变量将在源文件之外使用的地方)。
唯一的区别是如果您尝试在此文件结束之前重新分配它。
【讨论】:
在 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 变量也会相应变化。【讨论】: