なぜ次のように動作するのですか
var NameSpace = NameSpace || {};
NameSpace.Foo = 2;
しかし、これはそうではありませんか?
var NameSpace = NameSpace || {};
var NameSpace.Foo = 2;
名前空間に関する可変減速の内部動作についての洞察をいただければ幸いです。
なぜ次のように動作するのですか
var NameSpace = NameSpace || {};
NameSpace.Foo = 2;
しかし、これはそうではありませんか?
var NameSpace = NameSpace || {};
var NameSpace.Foo = 2;
名前空間に関する可変減速の内部動作についての洞察をいただければ幸いです。
var foo = foo;
ECMAscript はこの行を次のように分離するため、機能します。
var foo;
foo = foo;
フードの下。この概念は、一般に巻き上げと呼ばれます。
object プロパティを割り当てているため、2 番目のスニペットは機能しません。このvar
キーワードは常に、現在の実行コンテキスト内で変数、いわばシンボルを作成することを意味します。
もちろん、あなたができることは
var Foo = NameSpace.Foo = 2;
これは
Foo
現在のコンテキストで変数を作成しますFoo
を割り当てるNameSpace
2
JavaScript には名前空間がありません。コードの最初の行は、名前がNamespace
で、値がオブジェクトである変数を宣言しています。
var NameSpace = NameSpace || {};
次に、オブジェクトにプロパティ Foo
を作成し、それに値を割り当てます。
NameSpace.Foo = 2;
結論: 変数とオブジェクト プロパティは別のものです (他の違いの中でも、変数にはスコープがありますが、プロパティにはありません)。このvar
ステートメントは、変数を宣言するためだけのものです。
var
既存の変数を変更するのではなく、新しい変数を宣言するために予約されています。
また.
、変数名には無効な文字です。