Rumah > Soal Jawab > teks badan
Kita semua tahu bahawa tugasan dalam JavaScript adalah dari kanan ke kiri
var a = b = c
Pernyataan di atas sebenarnya dilaksanakan seperti ini
b = c
var a = b
Tetapi bagaimana jika seseorang terlibat? Contoh yang saya nampak semalam
var foo = { a: 2 }
var bar = foo
foo.x = foo = { b: 3 }
Dua baris pertama sangat mudah, ia menunjuk bar ke foo.
Dalam baris ketiga, foo = { b: 3 } dilaksanakan pada permulaan, yang mengubah hala foo ke objek lain.
Ayat seterusnya foo.x = foo, saya pada asalnya fikir foo itu.
foo = {
b: 3,
x: {
b: 3,
x: {
b: 3,
x: {
......
}
}
}
}
Tetapi ujian sebenar mendapati bahawa foo.x dalam ayat foo Tetapi adakah pelaksanaan sebenar adalah dari kanan ke kiri? PHPz2017-05-18 10:53:04
Saya baru saja melihat penjelasan yang hebat daripada seorang tuan (saya sedang menyemak maklumat anggaran penetapan objek yang berterusan adalah ini: foo.x = foo = { b: 3 }, dalam penterjemah Semasa pelaksanaan, mula-mula semak sama ada foo.x dan foo telah dicipta. Jika tidak, buat dan arahkan kedua-duanya ke objek paling kanan kali ini, bar dan foo kedua-duanya menunjuk ke {a:2,x:null}, dan kemudian halakan kedua-duanya ke objek di sebelah kanan {b:3}. {b :3}}, foo menunjuk ke {b:3};
PHP中文网2017-05-18 10:53:04
Kami baru sahaja membincangkan isu ini baru-baru ini, dan kami membuat kesimpulan bahawa: foo.x
中的 foo
实际是对 { a: 2 }
adalah rujukan, tetapi perintah pelaksanaan masih dari kanan ke kiri, tidak ada keraguan mengenainya.
var foo = { a: 2 }
var bar = foo.a = 3
console.log(bar) //3
var foo1 = { a: 2}
var bar1 = foo1.a
foo1.a = 3
console.log(bar1) //2
漂亮男人2017-05-18 10:53:04
Tugasan ialah ungkapan,
Associativity adalah dari kanan ke kiri, iaitu, a = b = c
ialah a = (b = c)
a = b = c
是a = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c
的返回值是c
Nilai pulangan ialah nilai pulangan ungkapan di sebelah kanan tanda sama, iaitu nilai pulangan b = c
ialah nilai c kod>.
仅有的幸福2017-05-18 10:53:04
Tempatan kiri ke kanan (.), makro kanan ke kiri (=). Foo ini bukan foo itu.
foo.x = foo = { b: 3 }
Apabila membaca foo kedua, ia telah memperoleh rujukan { a: 2 }
daripada foo pertama dan sedang menunggu untuk memberikan nilai kepada atribut xnya.
滿天的星座2017-05-18 10:53:04
Tugasan adalah dari kanan ke kiri, tetapi kod mesti diproses sebelum pelaksanaan foo.x = foo = { b: 3 }
,对属性的处理是按值进行的,即此时已经定位到了{ a: 2 }
Lokasi storan sebenar objek ini dan tugasan kepada atribut x juga merupakan tugasan kepada atribut x objek sebenar. , sama ada ia adalah foo Objek yang ditunjuk masih objek yang ditunjuk oleh bar. Tugasan kepada objek mengubah alamat objek sebenar yang disimpan dalam objek, iaitu menukar penunjuk foo.
高洛峰2017-05-18 10:53:04
Saya rasa cara penulisan ini tidak masuk akal.
Dalam pengeluaran sebenar, jika anda menemui banyak kod sedemikian, bolehkah anda memahaminya dengan sepintas lalu?
Sama seperti sekarang, berapa ramai orang yang menjawab soalan-soalan sebelum ini boleh menerangkannya dalam istilah orang awam?
怪我咯2017-05-18 10:53:04
var a=b=c;
b=c;//c
a=c;
foo.x = foo = { b: 3 }
foo = { b: 3 };//返回值为 { b : 3 } 的指针,下同
foo.x = { b : 3 }的指针;
Tetapi sebenarnya melaksanakan tiga pernyataan di atas mengikut tertib, hasilnya akan berbeza, kerana foo.x telah disediakan semasa peringkat penghuraian, jadi ia sebenarnya menunjuk ke bar.x
kod yang setara sebenarnya
foo.x = foo = { b: 3 }
foo = { b: 3 };//{ b : 3 }
bar.x = { b : 3 }的指针;