Rumah > Soal Jawab > teks badan
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?
我想大声告诉你2017-05-19 10:35:08
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
PHPz2017-05-19 10:35:08
Saya rasa anda mungkin perlu mengetahui lebih lanjut tentang skop pembolehubah Skop js sudah ditentukan apabila ia ditakrifkan.
Klip 1
function fn(){
var box = document.getElementById("box");
box.onclick = function(){
console.log(111);
};
box = null;
}
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中
function fn(){
var box = document.getElementById("box");
box.onclick = click;
}
function click(){
console.log(111);
}
click
方法在fn函数外部,与之同级,由于定义时,click
klik
berada di luar fungsi fn dan berada pada tahap yang sama kerana klik
belum lagi berada di dalam fn apabila ia ditakrifkan, skop dalamannya tidak boleh diakses . 🎜