Seperti di atas, g tidak boleh diberikan nilai baharu saya mahu menulis fungsi fn yang boleh menetapkan nilai kepada pembolehubah luaran secara sewenang-wenangnya
Keperluan sebenar adalah seperti di atas, saya ingin menetapkan pembolehubah instantiated ke luar
Konsep yang tidak difahami oleh penyoal ialah masalah bagaimana parameter fungsi diluluskan.
Apabila pembolehubah luaran dihantar ke dalam fungsi sebagai parameter, anda perlu memahami dua situasi, satu ialah jenis data asas dan satu lagi adalah objek.
Apabila parameter adalah jenis data asas, parameter dalam fungsi diluluskan mengikut nilai, iaitu, nilai disalin ke parameter Bagaimana fungsi menukar nilai parameter hanyalah perubahan kepada salinan parameter sebenar, yang tidak akan menjejaskan ontologi Seperti yang ditunjukkan dalam tangkapan skrin anda.
Apabila parameter adalah objek, saya sebenarnya fikir ia adalah pemindahan nilai, tetapi apa yang diluluskan ialah nilai alamat rujukan objek secara dalaman mengindeks alamat objek rujukan kepada objek data sebenar, dan kemudian menukar atribut dalam objek. Ini Ia adalah keadaan yang akan menjejaskan dunia luar.
Secara umumnya, jika anda ingin memberikan nilai kepada pembolehubah luaran. Anda juga mungkin tidak melepasi pembolehubah sebagai parameter, tetapi melakukan pemprosesan terus dalam badan fungsi.
Mengikut peraturan carian pembolehubah fungsi, mula-mula cari sama ada pembolehubah mempunyai g dalam badan pelaksanaan semasa Jika ia tidak menjumpainya di lapisan luar, ini bermakna pembolehubah itu belum ditakrifkan atau diisytiharkan.
Lulus parameter fungsi Javascript ialah semua "laluan nilai".
Cara yang lebih munasabah untuk menulisnya ialah
Kaedah penulisan yang tidak munasabah
Sebab ketiga mengapa yang terakhir tidak munasabah ialah tahap gandingan terlalu tinggi.
Ini boleh melakukan apa yang anda perlukan, tetapi anda mungkin mahu yang universal, bukan?
var g;
fungsi fn(nilai){
g = nilai;
}
fn(1);
g//1