2017-03-09 7 views
0

ローカル変数を宣言する2つの方法に違いはありますか? 2番目の方法は実際にグローバルに行くのだろうか?私はアプリの中にconst componentName = 'xxxxxx'を持ついくつかの異なるコンポーネントを持っており、衝突していないように見えます。これらの2つのローカル変数を入れたのとの違い

file1.js

export default class MyComponent extends React.Component { 
    constructor(){ 
     ... 
     this.options = ['a', 'b', 'c']; 
     this.componentName = 'MyComponent'; 
    } 

    ... 
} 

file2.js 1として

const options = ['a', 'b', 'c']; 
const componentName = 'MyComponent'; 
export default class MyComponent extends React.Component { 
    constructor(){ 
     ... 
    } 
    ... 
} 
+3

それを自分で試してみて、見つけていないのはなぜ? (最初の例ではP.S.はインスタンス変数でありローカル変数ではありません) –

+2

constは実際にはエクスポートされていないため、現在のモジュールにのみ存在します。 – Li357

+0

私は試してみましたが、実際にはウィンドウオブジェクトにないので、私は尋ねます。私は実際に彼らがそこにいることを期待します。 – Kossel

答えて

0

これを見てください:

のJavaScript

16.2モジュールにはJavaScriptを組み込みモジュールがなかったにもかかわらず、社会は が上に収束している:リンクからhttp://exploringjs.com/es6/ch_modules.html#sec_modules-in-javascript

をES5以前のライブラリでは ライブラリでサポートされている単純なスタイルのモジュールです。このスタイルは、ES6でも採用されています。

各モジュールは、一度ロードされると実行されるコードです。そのコードの には、宣言(変数宣言、関数 宣言など)があります。デフォルトでは、これらの宣言は モジュールのローカルに残ります。そのうちのいくつかをエクスポートとしてマークしてから、他のモジュールで をインポートすることができます。モジュールは他のモジュールから物をインポートできます。 相対パス( '../model/user'):これらのパスは、インポートモジュールの相対位置として と解釈されます。ファイル拡張子 .jsは通常省略できます。絶対パス( '/ lib/js/helpers'):インポートするモジュールのファイルに直接 をポイントします。名前( 'util'): 参照するモジュール名を設定する必要があります。モジュールは シングルトンです。モジュールが複数回インポートされても、そのモジュールのインスタンスが1つしか存在しません。

モジュールへのこのアプローチは、グローバル変数 <を回避 - 、グローバルで

唯一のものは、モジュール指示子です。< - 実施例1で

、彼らは、インスタンスの一部である(彼らはしかしグローバルではありません)あなたはそれらあなたのクラスの一部にするので、彼らは、クラスのインスタンス内で使用可能な「このため、グローバルな "window"オブジェクトではなく、クラスのインスタンスを参照します。だから、thatsの例では

2.あなたのconsts uはuが

export const foo = 'bar'; (still not global, but can be imported within other modules) 

ような何かを enlessでそれらを宣言したモジュール内のローカルのままになります(そのため、実施例1で、彼らはローカル変数ではありません)差。

もう一つの良い読み取り:https://joshbedo.github.io/JS-Design-Patterns/ JavaScriptのデザインパターン(モジュールパターンなど)

0

docsconst用:

定数がはるかに 使用して定義された変数のような、ブロックスコープでありますletステートメント。

letためdocsに、次に参照:プログラムと機能、聞かせてのトップレベルで

、VARとは異なり、 はグローバルオブジェクトのプロパティを作成しません。

あなたが指摘しているように、でもトップレベルで、constはグローバルオブジェクト(window)を汚染しないであろう。

+0

それでは、「プライベート」プロパティを配置する2つの方法と実用的な違いはありますか?両方ともちょうどモジュール/クラスの中に座っているように見える – Kossel

+1

@KosselはAndrew Liが言ったように、第2の例ではconstをエクスポートしないので、constモジュールはそのモジュール内にのみ存在し、最初の例ではクラスの一部としてエクスポート内で利用可能であり、2番目の例ではそれらはarentです。 - モジュール内にのみ存在するため、グローバルには移動しません –

関連する問題