console.log() memaparkan nilai pembolehubah sebelum ia benar-benar berubah
P粉356361722
2023-08-22 17:35:57
<p>Saya faham kod ini. Mari buat salinan A dan panggilnya C. Apabila A berubah, C tetap sama. </p>
<pre class="brush:php;toolbar:false;">var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1</pre>
<p>Tetapi apabila A ialah tatasusunan, keadaannya berbeza. Bukan sahaja C berubah, tetapi ia berubah sebelum kita menyentuh A. </p>
<pre class="brush:php;toolbar:false;">var A = [2, 1];
var C = A;
console.log(C); // [2, 1]
A.sort();
console.log(C); // [1, 2]</pre>
<p>Bolehkah sesiapa menerangkan apa yang berlaku dalam contoh kedua? </p>
console.log()
Menerima rujukan kepada objek, jadi apabila objek berubah, nilai dalam konsol juga akan berubah. Untuk mengelakkan perkara ini, anda boleh menggunakan kaedah berikut:AMARAN MDN:
Jawapan Pointy memberikan maklumat yang baik, tetapi bukan jawapan yang betul untuk soalan itu.
Tingkah laku yang diterangkan oleh OP adalah sebahagian daripada pepijat yang pertama kali dilaporkan pada Mac 2010, telah diperbaiki untuk Webkit pada Ogos 2012, tetapi sehingga berita ini ditulis masih belum disepadukan ke dalam Google Chrome. Tingkah laku bergantung pada sama ada tetingkap nyahpepijat konsol
console.log()
terbuka atau tertutup apabila menghantar objek literal kepada .Petikan daripada laporan pepijat asal (https://bugs.webkit.org/show_bug.cgi?id=35801):
Maklum balas daripada pembangun Chromium:
Banyak aduan berlaku, yang akhirnya membawa kepada pembetulan pepijat.
Perihalan changelog bagi tampung yang dilaksanakan pada Ogos 2012 (http://trac.webkit.org/changeset/125174):