Apakah perbezaan antara memberikan terus fungsi kepada pembolehubah dan merujuk fungsi?
Contohnya: Fragment 1 dan Fragment 2
Klip 1
function fn(){
var box = document.getElementById("box");
box.onclick = function(){
console.log(111);
};
box = null;
}
Klip 2
function fn(){
var box = document.getElementById("box");
box.onclick = click;
}
function click(){
console.log(111);
}
Fungsi dalam onclick dalam serpihan 1 membenarkan akses kepada pembolehubah dalam fn, tetapi fungsi onclick dalam serpihan 2 tidak membenarkan akses kepada pembolehubah dalam fn Ini yang saya fikir, kerana klik dalam serpihan 2 ditakrifkan di luar fn fn tidak boleh diakses, jadi ini bermakna tugasan untuk onclick dalam Fragmen 2 sebenarnya adalah rujukan dan bukannya salinan?
Tidak, tidak, anda tidak memanggil kaedah atau lulus parameter, jadi teras kedua-dua contoh ini bukanlah isu rujukan/salinan
Ini adalah masalah skop (rantai prototaip)
Pembolehubah mempunyai hak akses yang berbeza dalam skop yang berbeza:
Skop kanak-kanak boleh mengakses skop ibu bapa
Skop ibu bapa tidak boleh mengakses skop kanak-kanak
Skop pada tahap yang sama tidak boleh mengakses satu sama lain
Saya rasa anda mungkin perlu mengetahui lebih lanjut tentang skop pembolehubah Skop js sudah ditentukan apabila ia ditakrifkan.
Klip 1
Panggil balik
onclick
yang terikat pada kotak berada di dalam fungsi fn, jadi semua pembolehubah tempatan di dalamnya boleh diakses oleh panggilan balik.onclick
回调,是在fn的函数内部,因此其内部所有局部变量都能被该回调访问到。片段2中
Klip 2🎜 rrreee 🎜Kaedahclick
方法在fn函数外部,与之同级,由于定义时,click
klik
berada di luar fungsi fn dan berada pada tahap yang sama keranaklik
belum lagi berada di dalam fn apabila ia ditakrifkan, skop dalamannya tidak boleh diakses . 🎜