Hubungan antara pembolehubah JavaScript, pemindahan nilai, pemindahan alamat dan parameter_jquery

WBOY
Lepaskan: 2016-05-16 15:48:57
asal
1021 orang telah melayarinya

Biarkan hasil tuaian kering seketika dahulu:

1.pembolehubah javascript mengandungi dua jenis nilai, satu ialah nilai jenis rujukan dan satu lagi ialah nilai jenis asas. Jenis rujukan termasuk: Tatasusunan, Objek, Fungsi (boleh difahami bahawa jenis bukan asas ialah jenis rujukan);

2. Mekanisme untuk menghantar parameter fungsi adalah untuk menyalin nilai pembolehubah.

Buku itu berkata: "Menyalin nilai di luar fungsi ke parameter di dalam fungsi adalah sama seperti menyalin nilai dari satu pembolehubah ke pembolehubah lain. Pemindahan jenis asas adalah sama seperti penyalinan pembolehubah jenis asas, dan pemindahan jenis rujukan Ia adalah sama seperti salinan pembolehubah jenis rujukan "

.

" Apabila pembolehubah menyalin nilai jenis rujukan, salinan nilai yang disimpan dalam objek pembolehubah juga disalin ke ruang yang diperuntukkan untuk pembolehubah baharu. Perbezaannya ialah salinan nilai sebenarnya adalah penunjuk , dan penunjuk ini menunjuk ke objek yang disimpan dalam timbunan Selepas operasi penyalinan selesai, kedua-dua pembolehubah sebenarnya akan merujuk kepada objek yang sama Oleh itu, menukar salah satu pembolehubah akan mempengaruhi pembolehubah yang lain.

[Nota: Menyalin nilai jenis rujukan ialah satu-satunya cara untuk menghantar alamat]

3. Parameter sebenarnya adalah pembolehubah setempat bagi fungsi tersebut.

------------------------------------------------ --------------------------

Penjelasan konsep asas:

Nilai pindahan: pindahkan nilai A ke B, tukar B, A tidak akan berubah dengan sewajarnya, B menyimpan nilai yang sama dengan A

Alamat pemindahan: pindahkan alamat A ke B, tukar B, dan A akan bertukar pada masa yang sama B hanya menyimpan alamat A (serupa dengan pintasan komputer).


Data dengan jenis nilai disimpan dalam pembolehubah pada tindanan. Iaitu, memperuntukkan ruang memori dalam timbunan dan menyimpan secara langsung nilai yang terkandung, nilai mewakili data itu sendiri. Data jenis nilai mempunyai kelajuan akses yang lebih pantas.

Data dengan jenis rujukan tidak berada pada tindanan, tetapi disimpan dalam timbunan. Iaitu, memperuntukkan ruang memori dalam timbunan tidak secara langsung menyimpan nilai yang terkandung, tetapi menunjuk kepada nilai yang akan disimpan, dan nilainya mewakili alamat yang ditunjuk. Apabila mengakses data dengan jenis rujukan, anda perlu menyemak kandungan pembolehubah pada tindanan, yang merujuk kepada data sebenar dalam timbunan. Data jenis rujukan mempunyai saiz storan yang lebih besar dan kelajuan akses yang lebih rendah daripada data jenis nilai.

------------------------------------------------ --------------------------

Berikut ialah tiga soalan.

[Soalan 1]:

Mengapa bahagian luar tidak terganggu selepas fungsi change(a) dilaksanakan?

<script>
var a = [1, 2, 3];
function change(a) {
 console.log(a);//[1,2,3]
 a = 2;   //传值
 console.log(a);//2
}
change(a);
console.log(a);  //[1,2,3] 
</script>

Salin selepas log masuk
Jawapan kepada soalan 1: Oleh kerana proses pelaksanaan change(a) adalah seperti ini, selepas objek a (array) mula-mula dihantar ke dalam perubahan, ia disalin ke parameter a perubahan. Kemudian a=2 ialah pernyataan tugasan dan menjadi nilai pas. Pada masa ini, a=2 ialah jenis nilai dan tidak melibatkan isu alamat rujukan. Jadi ia tidak menjejaskan luaran a.

[Soalan 2]:

Mengapa bahagian luar terganggu selepas fungsi change(a) dilaksanakan?

<script>
 var a = [1, 2, 3];
 function change() { 
  a = 2;//传值
 }
 change();
 console.log(a);  //2 
</script>

Salin selepas log masuk
Jawapan kepada soalan 2: Apabila melaksanakan change(), fungsi mencari rantai skop dalam persekitaran pelaksanaannya sendiri Objek pengaktifan tidak mengandungi pembolehubah a, jadi ia mencari ke atas sepanjang rantai skop untuk mencari Pelaksanaan global. persekitaran, pembolehubah a ditemui, jadi pada masa ini a dalaman fungsi dan luaran a adalah alamat yang sama dalam ingatan Sememangnya, jika dalaman a fungsi berubah, yang luaran juga akan berubah.

Analisis: Perbezaan antara soalan 2 dan soalan 1 ialah soalan 2 tidak memperkenalkan parameter, jadi ia tidak melibatkan penyalinan pembolehubah.

[Soalan 3]:

Mengapa bahagian luar terganggu selepas fungsi change(a) dilaksanakan?

<script>
 var a = [1, 2, 3];
 function change(b) { 
  b[0] = 2;
 }
 change(a);
 console.log(a);  //[2,2,3]
</script>

Salin selepas log masuk
Jawapan kepada soalan 3: Ini hampir sama dengan soalan 1. Satu-satunya perbezaan ialah a=2 digantikan dengan b[0]=2 Saya keliru pada mulanya. Parameter b sepatutnya merupakan nilai yang disalin, bagaimanakah ia boleh menjejaskan bahagian luar a?

Sesungguhnya, apabila fungsi perubahan dilaksanakan, parameter b ialah nilai yang disalin bagi a. Kerana a ialah jenis rujukan, di dalam fungsi, b dan a akses objek alamat melalui rujukan. Kejadian b[0]=2 tidak menjejaskan fakta bahawa b dan a merujuk kepada objek yang sama di dalam fungsi.

[Soalan 4]:

Mengapa bahagian luar tidak terganggu selepas fungsi change(a) dilaksanakan?

 var a = [1, 2, 3];
 function change(b) { 
  console.log(b);//[1,2,3]
  b=2;
  b[0] = 2;
 }
 change(a);
 console.log(a);  //[1,2,3]

Salin selepas log masuk
Jawapan kepada soalan 4: Proses pelaksanaan perubahan(b) adalah seperti berikut: objek a dihantar ke dalam fungsi perubahan, dan nilai serta alamat disalin ke b. Ayat b=2, b menjadi jenis nilai pada masa ini, dan tidak melibatkan isu rujukan alamat Ayat b[0]=2 sebenarnya tidak bermakna selepas itu, kerana b bukan lagi tatasusunan pada masa ini. dan secara semula jadi ia tidak mempunyai kaedah Pengindeksan seperti b[0]. Oleh itu, hubungan rujukan alamat antara b dan a sebenarnya hilang selepas b=2. Pada masa ini, a luaran masih [1,2,3];

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!