Rumah > Soal Jawab > teks badan
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
PHPz2017-05-19 10:41:36
Konsep yang tidak difahami oleh penyoal ialah masalah bagaimana parameter fungsi diluluskan.
var g = 1;
function fn(a){a=2;}
fn(g);
g//1
//我是分割线
var g = {a:1};
function fn(b){b.a=2;}
fn(g);
g//{a:2}
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.
var g;
function fn(){
g = 1;
}
fn();
g//1
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.
習慣沉默2017-05-19 10:41:36
Lulus parameter fungsi Javascript ialah semua "laluan nilai".
Cara yang lebih munasabah untuk menulisnya ialah
var g;
function fn() {
return 33
}
g = fn();
Kaedah penulisan yang tidak munasabah
var g;
function fn() {
g = 33;
}
fn();
Sebab ketiga mengapa yang terakhir tidak munasabah ialah tahap gandingan terlalu tinggi.
大家讲道理2017-05-19 10:41:36
var g;
function fn(){
g = '32';
}
fn();
Ini boleh melakukan apa yang anda perlukan, tetapi anda mungkin mahu yang universal, bukan?
你可以选择这样:
var g;
function fn(){
return '32';
}
g = fn();