Pertanyaan dalam javascript, apa yang terjadi jika: x = []; x.push (x) ;?


var x = []; 
x.push(x);

x sekarang tampaknya menjadi array meta jenis rusia-boneka yang sangat mendalam.

jika kamu memeriksa x[0][0][0].... sebanyak [0] indeks saat Anda menambahkan, itu masih mengembalikan array satu item.

tetapi apakah ada cutoff kedalaman yang terbatas? atau tingkat baru yang dihasilkan secara prosedural saat Anda memeriksanya? itu adalah dua kemungkinan yang dapat saya pikirkan.


5
2018-06-07 04:43


asal


Jawaban:


var x = []; 
x.push(x);

x sekarang tampaknya menjadi jenis meta rusia-boneka jauh mendalam.

Tidak juga. x adalah sebuah array. Elemen pertama dalam array menunjuk ke lokasi memori yang sama sebagai x diri. Tidak lebih, tidak kurang.

Tapi ya, Anda bisa melakukannya

x[0][0][0]

sebanyak yang Anda suka, karena Anda hanya mereferensikan kembali lokasi memori yang sama berulang kali.


4
2018-06-07 04:47



Tidak ada yang dihasilkan ketika Anda mendapatkan x pada tingkat apa pun. X dimasukkan sebagai referensi.

Saat melakukan dereferencing x [0], Anda mendapatkan x.

x == x [0];


0
2018-06-07 04:47



Tidak ada lingkaran di sini. Anda membuat larik kosong dan menyetelnya x. Kemudian baris selanjutnya x.push(x); hanya mendorong array kosong ke x. Jika Anda di mana untuk menambah lakukan x.push(x); lagi itu akan mendorong array ke dalam x yang memiliki larik kosong di indeks pertama.


0
2018-06-07 04:50