JavaScript ES6エクスポートconstとエクスポートlet


149

エクスポートしたい変数があるとしましょう。違いは何ですか

export const a = 1;

export let a = 1;

私は違いを理解constしてletいますが、それらをエクスポートするとき、違いは何ですか?


exportキーワードの詳細はこちら。現在、どのWebブラウザーでもネイティブでサポートされていません。
RBT 2017年

回答:


247

ES6では、importsはエクスポートされた値のライブ読み取り専用ビューです。その結果、を実行すると、モジュールでどのように宣言しても、にimport 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.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

インポートした後の動作は同じだと思います(変数がソースファイルの外で使用される場所でも)。

唯一の違いは、このファイルの終わりまでに再度割り当てようとした場合です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.