代入演算子が右結合であることは理解しています。
たとえば x = y = z = 2
、(x = (y = (z = 2)))
ということで、以下のことを試してみました。
foo.x = foo = {a:1}
オブジェクトfoo
が値で作成され{a:1}
、次にプロパティx
が作成されfoo
、オブジェクトへの参照になると予想していましたfoo
。
(これは、複数の代入ステートメントを 2 つの別個のステートメントに分割した場合に実際に起こることですfoo = {a:1};foo.x = foo;
)
実際の結果は次のとおりです。
ReferenceError: foo が定義されていません(…)
それで、私は次のことを試しました:
var foo = {};
foo.x = foo = {a:1};
これで例外は発生しなくなりましたが、foo.x
未定義です!
割り当てが期待どおりに機能しないのはなぜですか?
免責事項:「重複」の質問は、私が求めているものとは大きく異なるようです。問題は、割り当てで作成された変数がグローバルであり、
var
キーワードで作成された変数に並置されているためです。それはここでは問題ではありません。