2017-03-11 3 views
1

は、私はちょうど私が前に見たことがなかった大会に出くわした:なぜ、window.varNameを使用してグローバルを宣言する必要がありますか?

window.theme = window.theme || {}; 

は、それを研究していくつかの時間を費やして、私はそれがvarでグローバル変数を宣言する代わりだということを発見しました。なぜ、いつ、私はそれをそのようにしたいと思いますか?それは単に個人の好みにまで下がっていますか?

また、これは質問には直接関係しませんが、OR演算子は私にも混乱しています。私はそれが機能していることを理解しています:まだ存在しない場合は、window.themeを空のオブジェクトに設定します。スクリプト内の他の場所ですでにインスタンス化されている場合のために、安全対策としてそこにはありますか?

答えて

0

グローバルレベルでのvar VARNAME対window.varNameためこの回答を参照してください:エンタープライズアプリケーションでは、彼らはそれらをいじって、他の人が、紛争に開いているので、https://stackoverflow.com/a/12393346/2592585

私の個人的な好みは、グローバルを避けるためである、などセキュリティも問題になります(神からの誤ったスクリプトが、そのvarにアクセスする場所を知っていますか?)。これらは、Java用のクラスのパブリックフィールドと同様です。 「現代の」JS開発は、依存関係注入や永続サービスを使用してデータを共有します。

あなたが参照している特定の構文は、擬似コードで次のようになります。 window.themeをそれ自身または空のオブジェクトに設定します。式は左から右に評価されるため、window.varNameが定義されている場合、JSはソートの「真」として評価し、そこで終了し、それ自身に割り当てます。 window.varNameが定義されていない場合、文は偽と評価され、ORはwindow.varNameが右側にあるものに割り当てられるようになります、それがどのように動作するかの{}

より明示的なビューには、三項演算子としてそれを書くことになります: window.varName = (window.varName ? window.varName : {});がありますが、簡単にするためにスニペットを使用することをお勧めします。単純な未定義チェックよりも複雑な条件の1行の代入に対しては3項演算子を使用します。

JS namespacingを実行したり、定義したいオブジェクトにプロパティをアタッチしたりするときは、使用している構文が一般的です。それが既に存在する場合は、クール、続行、そうでない場合は空のオブジェクトに設定し、エラーが発生しないようにします。

関連する問題