Analisis perbezaan antara pemanggil dan pemanggil dalam kemahiran javascript_javascript

WBOY
Lepaskan: 2016-05-16 16:03:13
asal
1119 orang telah melayarinya

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);
};
};
Salin selepas log masuk

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);
};
};
Salin selepas log masuk

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和内容
Salin selepas log masuk

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);
};
Salin selepas log masuk
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);
};

Salin selepas log masuk
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.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!