cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Masalah penetapan nilai dalam JS

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梦2750 hari yang lalu696

membalas semua(9)saya akan balas

  • PHPz

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

    balas
    0
  • PHP中文网

    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

    balas
    0
  • 漂亮男人

    漂亮男人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 = ca = (b = c)
    返回值是,等号右边那个表达式的返回值,即 b = c 的返回值是cNilai pulangan ialah nilai pulangan ungkapan di sebelah kanan tanda sama, iaitu nilai pulangan b = c ialah nilai c.

    balas
    0
  • 仅有的幸福

    仅有的幸福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.

    balas
    0
  • 滿天的星座

    滿天的星座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.

    balas
    0
  • 高洛峰

    高洛峰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?

    balas
    0
  • 迷茫

    迷茫2017-05-18 10:53:04

    /a/11...

    balas
    0
  • 怪我咯

    怪我咯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 }的指针;

    balas
    0
  • PHP中文网

    PHP中文网2017-05-18 10:53:04

    Anda boleh menggunakan penunjuk untuk memahami masalah ini

    balas
    0
  • Batalbalas