176

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

export const a = 1;

export let a = 1;

constとの違いは理解できletますが、エクスポートするとどのような違いがありますか?

4

2 に答える 2

300

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

于 2015-09-14T07:04:54.623 に答える
1

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

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

于 2015-09-14T07:00:45.350 に答える