1

なぜ次のように動作するのですか

var NameSpace = NameSpace || {}; 
NameSpace.Foo = 2;

しかし、これはそうではありませんか?

var NameSpace = NameSpace || {}; 
var NameSpace.Foo = 2;

名前空間に関する可変減速の内部動作についての洞察をいただければ幸いです。

4

3 に答える 3

1
var foo = foo;

ECMAscript はこの行を次のように分離するため、機能します。

var foo;
foo = foo;

フードの下。この概念は、一般に巻き上げと呼ばれます。

object プロパティを割り当てているため、2 番目のスニペットは機能しません。このvarキーワードは常に、現在の実行コンテキスト内で変数、いわばシンボルを作成することを意味します。

もちろん、あなたができることは

var Foo = NameSpace.Foo = 2;

これは

  • Foo現在のコンテキストで変数を作成します
  • オブジェクトにオブジェクトプロパティFooを割り当てるNameSpace
  • の両方の値を割り当てます2
于 2013-04-30T16:15:31.417 に答える
1

JavaScript には名前空間がありません。コードの最初の行は、名前がNamespaceで、値がオブジェクトである変数を宣言しています。

var NameSpace = NameSpace || {};

次に、オブジェクトにプロパティ Fooを作成し、それに値を割り当てます。

NameSpace.Foo = 2;

結論: 変数とオブジェクト プロパティは別のものです (他の違いの中でも、変数にはスコープがありますが、プロパティにはありません)。このvarステートメントは、変数を宣言するためだけのものです。

于 2013-04-30T16:38:24.150 に答える
0

var既存の変数を変更するのではなく、新しい変数を宣言するために予約されています。

また.、変数名には無効な文字です。

于 2013-04-30T16:14:35.073 に答える