2012-03-29 9 views
2

私はグローバル変数xを作成しようとしていると言う理由をJavaScriptでグローバルオブジェクトを作成:が存在しない場合、私は、このキーワードを指定する必要があります

x = x || {};   //This fails. x is not defined 
this.x = this.x || {}; //But this works 

私はこれを実行していますFirebugで1行目が失敗したことに驚きました。私はxがグローバルウィンドウオブジェクトにアタッチされることを期待しましたが、thisを指定しないと動作しませんでした。

言語の理解を深めたいと思っています。誰かがなぜこれが私に説明できますか?

ありがとうございました。あなたが宣言されていない変数式の一部を試してみて、使用している場合

+0

'x'は宣言されていないためです。あなたが 'var x;'と 'x = x || {} ' 'this'を使用しているときは、* variable *ではなく* property *(グローバルオブジェクトの)として' x'にアクセスしているので、この問題はありません。 – ZER0

+0

'x 'への参照を' window 'に効果的に追加しているので、' this.x'は機能します。グローバルスコープでは、 'this'は' window'を指します。 – Benno

答えて

2
  • 、あなたはReferenceErrorがスローされます。

  • 宣言されていない変数を割り当てようとすると、その変数は暗黙のグローバルとして宣言されます。暗黙グローバルは悪いです。

x = x || {};   
    ^ its this x that breaks it. 

正しく変数が宣言されているかどうかを確認するために、あなたはtypeof variable === "undefined"チェックを使用する必要があります。

未定義の属性(ただし、2番目の例ではxthisの属性)、デフォルトで値undefinedを保持します。

関連する問題