Saya menghadapi masalah hari ini, cara mempengaruhi perubahan parameter di luar fungsi, seperti:
<script> var myname = "wood"; A(myname); document.write(myname); function A(n) { n = "Yao"; } </script>
Hasil keluaran masih kayu, yang bermaksud bahawa apabila nama saya dihantar ke fungsi A, terdapat setara dengan salinan nama saya dalam badan fungsi dalam badan fungsi adalah berdasarkan salinan ini dijalankan.
Tetapi keadaannya berbeza Apabila parameter yang dihantar adalah tatasusunan dan objek, perubahan yang dibuat pada parameter dalam badan fungsi akan ditunjukkan dalam pembolehubah asal.
<script> var myname = ["wood"]; A(myname); document.write(myname[0]); function A(n) { n[0] = "Yao"; } </script>
Seperti yang anda lihat, elemen pertama tatasusunan friut telah ditukar dalam kod di atas.
Berikut ialah contoh objek:
<script> var myname = {name1:"wood"}; A(myname); document.write(myname.name1); function A(n) { n.name1 = "Yao"; } </script>
Ia boleh dilihat dengan jelas bahawa perubahan pada parameter dalam badan fungsi mempengaruhi pembolehubah asal, yang secara kualitatif berbeza daripada lulus parameter biasa. Perhatian khusus diperlukan.
Tetapi, apabila memberikan nilai kepada tatasusunan atau objek yang diluluskan di dalam badan fungsi, perubahan ini tidak akan ditunjukkan dalam pembolehubah asal di luar badan fungsi!
Sila lihat:
<script> var myname = {name1:"wood"}; A(myname); document.write(myname.name1); function A(n) { n = {name1:"Yao"}; } </script>
Menurut teori bahawa perubahan dalam fungsi di atas akan dicerminkan dalam pembolehubah asal, anda mesti berfikir bahawa nilai atribut name1 bagi pembolehubah nama saya telah berubah kepada 'Yao' selepas melaksanakan A(). Tetapi hasilnya agak sukar untuk ditelan.
Sebabnya ialah apabila operasi penugasan digunakan dalam badan fungsi, sistem mencipta pembolehubah bernama p. P ini adalah pembolehubah di dalam fungsi Sudah tentu, memberikan nilai kepadanya hanya berfungsi dalam badan fungsi Nama saya di luar masih nama saya yang asal.
Satu-satunya perbezaan antara langkah ini dan kod asal ialah sama ada untuk memberikan nilai baharu kepada parameter dalam badan fungsi atau menukar atribut parameter atau elemen tatasusunan.
Di bawah ini kami menggunakan kaedah menghantar objek untuk melaksanakan semula contoh output format digital jam:
<script> var mytime = self.setInterval(function() { getTime(); }, 1000); //alert("ok"); function getTime() { var timer = new Date(); var t = { h: timer.getHours(), m: timer.getMinutes(), s: timer.getSeconds() } //将时间对象t,传入函数checkTime(),直接在checkTime()中改变对象中的值。 //而无需再去接收返回值再赋值 checkTime(t); document.getElementById("timer").innerHTML = t.h + ":" + t.m + ":" + t.s; } function checkTime(i) { if (i.h < 10) { i.h = "0" + i.h; } if (i.m < 10) { i.m = "0" + i.m; } if (i.s < 10) { i.s = "0" + i.s; } } </script>
Contohnya menggunakan fungsi setInterval() untuk memanggil acara muat semula dengan kerap, atau ia juga boleh dilaksanakan dengan menggunakan setTimeout() untuk memanggil secara rekursif dalam getTime().
Di atas adalah keseluruhan kandungan artikel ini saya harap ia akan membantu semua orang dalam mempelajari pengaturcaraan javascript.