javascript - Masalah penetapan nilai dalam JS
过去多啦不再A梦
过去多啦不再A梦 2017-05-18 10:51:04
0
9
708

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?

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

membalas semua(9)
PHPzhong

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};

Ty80

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
漂亮男人

Tugasan ialah ungkapan,
Associativity adalah dari kanan ke kiri, iaitu, a = b = c ialah a = (b = c) a = b = ca = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c 的返回值是cNilai pulangan ialah nilai pulangan ungkapan di sebelah kanan tanda sama, iaitu nilai pulangan b = c ialah nilai c kod>.

仅有的幸福

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.

滿天的星座

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.

小葫芦

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?

迷茫

/a/11...

刘奇
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 }的指针;
洪涛

Anda boleh menggunakan penunjuk untuk memahami masalah ini

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan