2012-06-22 13 views
5

私はそれほど冗長グローバルスコープを参照するには、自己またはウィンドウを使用する必要がありますか?

example = "Hello"; 
alert(example); 

window.example = "Hello"; 
window.alert(window.example); 

を好む、グローバルスコープの変数にアクセスしてるときに、明示的になりたいスタイルの慣例として、私が今使用できるモジュールを持っていますブラウザから直接、または利用可能な場合はウェブワーカーからアクセスできます。 Webワーカーではグローバルオブジェクトはselfと呼ばれ、ブラウザではwindowと呼ばれます。 (:var self = this彼らはしばしばそうであるように)誰がselfを再宣言しないよう

windowオブジェクトは、自己性質を持っているので、self.example = "Hello"限り、両方のコンテキストで動作します。

どのようなコンベンションに最適ですか?

  • 使用selfと誰が競合selfを宣言していません願っています。
  • windowが定義されている場合はwindowを使用し、そうでない場合はselfを使用してください。
  • 他に何かありますか?

これについて考えてみると、私は第2のものと一緒に行く傾向があります。

答えて

6

を、いずれかのページまたはWeb労働者に、あなたができますこのようなコードを記述します。

(function(global) { 
    // ... whatever 
}(this); 

次に、その主な外側の関数内で使用すると、「グローバル」(またはそれを呼び出す「のwiを使用することができますndow "または" self "または" whatever ")、どちらのコンテキスト(Node.jsでも問題ありません)でも動作します。

1

私はあなたが窓や自己のいずれかに独自の基準を作成することができ

var global; try { global = window } catch(e) { global = self } 
+0

驚いたことに、これはWebワーカーで使用されると参照エラーが発生するようです。 Chromeは「ReferenceError:変数を見つけることができません:ウィンドウ」と言っています。私はrequireJSを使ってこのモジュールをワーカーからロードすることを言及する必要があります。だから私はそれがいくつかの不思議さの原因かもしれないと思います。 – RichardTowers

+0

申し訳ありませんが、私は存在しない変数の厳しい扱いを忘れていました。それを固定した。 – matt3141

+0

'global = typeof window!==" undefined "&& window!== null?ウィンドウ:自己;も間違いなく動作するようです。私は@ Pointyの答えが好きです。 – RichardTowers

0

をお勧めしたい:グローバルスコープで

var my_window = window || self; 
+0

しかし、Webワーカーでは、グローバルコンテキストはウィンドウではないので、グローバルコンテキスト 'my_window'を呼び出すと誤解を招きます。 – jfriend00

+0

開発者は明らかに自由に変数を指定することができます – jackwanders

関連する問題