1. ホーム
  2. javascript

[解決済み] Javascript ES6 export constとexport letの比較

2022-05-06 22:38:16

質問

例えば、エクスポートしたい変数があるとします。とはどのような違いがあるのでしょうか?

export const a = 1;

export let a = 1;

の違いは理解できました。 constlet しかし、それらをエクスポートした場合、どのような違いがあるのでしょうか?

どのように解決するのですか?

ES6では import は、エクスポートされた値に対する読み取り専用のライブビューです。その結果 import a from "somemodule"; に割り当てることはできません。 a をどのように宣言しても a をモジュール内で使用します。

ただし、インポートされた変数は 生きる ビューの場合、exports でエクスポートされた "raw" 変数にしたがって変化します。以下のコードを考えてみましょう(以下の参考記事から拝借)。

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