Hari ini saya menjawab soalan tentang Javascript, yang melibatkan isu tugasan, jadi saya ingin merumuskan soalan ini dengan baik.
Selepas melaksanakan kod di atas, adakah nilai pembolehubah a dan b akan berubah?
Nilai asal dan rujukan
Dalam artikel sebelumnya, kami memperkenalkan nilai asal dan nilai rujukan merujuk kepada Undefined, Null, Boolean, Number, String, dll. Mereka disimpan dalam tindanan, manakala nilai rujukan disepadukan. daripada Objek dan disimpan di dalam timbunan.
Di sini kita perlu membezakan dengan jelas antara keduanya:
Untuk empat pembolehubah di atas, a dan A ialah nilai asal, manakala b dan B ialah nilai rujukan.
Mekanisme tugasan
Setelah mengetahui perbezaan antara nilai asal dan nilai rujukan, kami boleh memperkenalkan mekanisme tugasan Javascript secara terperinci:
Dalam Javascript, untuk pembolehubah jenis nilai primitif, setiap tugasan akan menghasilkan salinan, manakala untuk nilai rujukan, seperti namanya, tugasan mengikut titik rujukan kepada memori objek storan yang sama.
Penetapan nilai asal:
Penugasan nilai rujukan:
Parameter lulus
Sekarang mari kita lihat cara mengendalikan menghantar dua jenis nilai kepada parameter berfungsi.
1. Lulus nilai asal
Output ialah 1, jadi kita tahu bahawa fungsi hanya melepasi nilai pembolehubah dalam, jadi m dalam badan fungsi mendapat nilai yang diluluskan 1, dan kemudian diberikan nilai 2. Proses ini tidak menjejaskan pembolehubah luaran a.
2. Nilai rujukan lulus
Output ialah 2, jadi kita tahu bahawa fungsi itu melepasi alamat pembolehubah, jadi M dalam badan fungsi mendapat alamat yang diluluskan, jadi atribut x diberikan nilai 2 dan juga akan mempengaruhi A menunjuk ke alamat ingatan yang sama.
Ringkasan
Sekarang kembali kepada soalan pembukaan:
Pembolehubah a ialah nilai asal dan pembolehubah b ialah nilai rujukan Satu ialah nilai dan satu lagi ialah alamat yang dihantar ke dalam badan fungsi Oleh itu, selepas fungsi dijalankan, pembolehubah a tidak akan berubah, tetapi nilai pembolehubah b akan berubah.