Rumah  >  Artikel  >  hujung hadapan web  >  Analisis perbezaan antara pemanggil dan pemanggil dalam kemahiran javascript_javascript

Analisis perbezaan antara pemanggil dan pemanggil dalam kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 16:03:131121semak imbas

panggilan

panggilan ialah atribut objek, iaitu penunjuk yang menunjuk ke fungsi objek argumen
Mula-mula, mari tulis fungsi pesanan:

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};

Seperti yang dapat dilihat dari fungsi ini, fungsi rekursif digunakan Jika nama fungsi ditukar, nama fungsi di dalam juga akan berubah Ini sangat menyusahkan, jadi kami menggunakan callee untuk mencubanya

function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};

Mari kita analisa mengapa ia ditulis seperti ini: Menurut definisi pemanggil, dapat dilihat bahawa pemanggil adalah atribut objek argumen dan menunjuk kepada fungsi objek argumen Fungsi ini adalah chen (chen=arguments .callee). Penjelasan ini harus difahami.

pemanggil

pemanggil ialah atribut objek fungsi, yang memegang rujukan kepada fungsi yang memanggil fungsi semasa (menunjuk kepada fungsi induk langsung bagi fungsi semasa)

Mari kita ambil contoh dahulu

function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容

Mari kita jelaskan terlebih dahulu, pemanggil atribut fungsi b memanggil rujukan fungsi a bagi fungsi semasa b (yang menunjuk kepada fungsi induk a bagi fungsi semasa b), jadi hasilnya ialah fungsi a(){ b();}; muncul;

Sekarang anda memahami pemanggil dan penerima, bolehkah anda menggabungkan kedua-duanya untuk menggunakannya?


function b(){
alert(b.caller);
};
Daripada kod ini, kita dapat melihat bahawa nama fungsi b dipanggil dalam fungsi b. Ini sangat menyusahkan apabila nama fungsi berubah Kita perlu menggantikan b

Sebelum ini kami tahu cara untuk menunjuk ke objek semasa, mari ubah suai seterusnya:

(function a(){
b();
})();

function b(){
alert(arguments.callee.caller);
};

Seperti yang dapat dilihat daripada kod, kami menggantikan fungsi b dengan arguments.callee, jadi masalah telah diselesaikan. . . . .

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn