javascript - JS での代入の問題
过去多啦不再A梦
过去多啦不再A梦 2017-05-18 10:51:04
0
9
703

JavaScript での代入は右から左へ行われることは誰もが知っています

リーリー

上記のステートメントは実際には次のように実行されます

リーリー

しかし、オブジェクトが関係している場合はどうなるでしょうか?昨日見た例

リーリー

最初の 2 行は非常に単純で、bar から foo を指すだけです。
3 行目では、最初に foo = { b: 3 } が実行され、foo が別のオブジェクトにリダイレクトされます。

次の文 foo.x = foo、私は当初、foo.x は foo を指していると考えていたため、foo はそれ自体を循環的に参照するオブジェクト、つまり

になります。 リーリー

しかし、実際のテストでは、foo という文の中に foo.x が見つかりました。そうですが、実際の実行は右から左へ行われるのでしょうか?

过去多啦不再A梦
过去多啦不再A梦

全員に返信(9)
PHPzhong

偉大なマスターからの良い説明を見ました(情報を確認中です)。オブジェクトの連続代入のおおよその説明は次のとおりです。最初はインタプリタの実行中に foo.x = foo = { b: 3 }。 foo.x と foo が作成されているかどうかを確認します。作成されていない場合は、両方を右端のオブジェクトにポイントします。明らかに foo が作成され、{ a: 2 } をポイントします。foo.x はまだ作成されていないので、作成します。このとき、bar と foo は両方とも {a:2,x:null} を指し、次に両方とも右側のオブジェクト {b:3} を指します。 {a:2,x:{b:3} },foo は {b:3} を指します。

いいねを押す +0
Ty80

私たちは最近この問題について議論したところ、次のような結論に達しました: foo.x 中的 foo 实际是对 { a: 2 } は参照ですが、実行順序は依然として右から左であり、これについては疑いの余地がありません。

リーリー
いいねを押す +0
漂亮男人

代入は式です。
結合性は右から左です。つまり、a = b = ca = (b = c) です。a = b = ca = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c 的返回值是c戻り値は、数値の右側の式の戻り値、つまり b = c の戻り値は、c の値になります。

いいねを押す +0
仅有的幸福

ローカルは左から右 (.)、マクロは右から左 (=)。この foo はあの foo ではありません。

リーリー

が 2 番目の foo を読み取るとき、すでに最初の foo から { a: 2 } の参照を取得しており、その x 属性に値を割り当てるのを待っています。

いいねを押す +0
滿天的星座

代入は右から左へ行われますが、コードは実行前に処理する必要があります。 foo.x = foo = { b: 3 },对属性的处理是按值进行的,即此时已经定位到了{ a: 2 }このオブジェクトの実際の格納場所は、それが指すオブジェクトであるかどうかに関係なく、実際のオブジェクトの x 属性への代入でもあります。 to foo または bar が指すオブジェクト。オブジェクトに代入すると、そのオブジェクトに格納されている実際のオブジェクトのアドレスが変更されます。つまり、foo のポインタが変更されます。

いいねを押す +0
小葫芦

この書き方は意味がないと思います。
実際の運用で、このようなコードがたくさん出てきたら、一目で理解できますか?
今と同じように、前の質問に答えてくれた人の中で、わかりやすく説明できる人は何人いるでしょうか?

いいねを押す +0
迷茫

/a/11...

いいねを押す +0
刘奇

リーリー リーリー

しかし、実際に上記の 3 つのステートメントを順番に実行すると、結果は異なります。foo.x は解析段階で準備されており、実際には bar.x を指しているためです。

実際の同等のコード

リーリー

いいねを押す +0
洪涛

この問題を理解するにはポインターを使用できます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート