Rumah > hujung hadapan web > tutorial js > Mengapakah `arguments.callee.caller` Ditamatkan dalam JavaScript?

Mengapakah `arguments.callee.caller` Ditamatkan dalam JavaScript?

DDD
Lepaskan: 2024-11-12 10:17:02
asal
633 orang telah melayarinya

Why Was `arguments.callee.caller` Deprecated in JavaScript?

Mengapa Harta Arguments.callee.caller Ditamatkan dalam JavaScript

Dalam JavaScript, arguments.callee.caller telah diperkenalkan dan kemudiannya ditamatkan. Walau bagaimanapun, sesetengah pelayar masih menyokongnya, manakala yang lain telah meninggalkannya sepenuhnya. Timbul persoalan: mengapakah fungsi yang kelihatan berguna ini ditinggalkan?

Keperluan untuk Rekursi

Dalam早期 versi JavaScript, ungkapan fungsi bernama tidak disokong. Ini menjadikan ia mencabar untuk mencipta ungkapan fungsi rekursif.

Sebagai contoh, pertimbangkan fungsi faktorial:

[1,2,3,4,5].map(factorial);
Salin selepas log masuk

Tanpa ungkapan fungsi bernama, kod ini tidak akan berfungsi. Sifat arguments.callee memberikan penyelesaian:

[1,2,3,4,5].map(function(n) {
     return (!(n>1))? 1 : arguments.callee(n-1)*n;
 });
Salin selepas log masuk

Kelemahan Arguments.callee

Walau bagaimanapun, arguments.callee datang dengan beberapa kelemahan:

  • Ia menghalang pengoptimuman seperti inlining dan tail rekursi.
  • Ia mengubah nilai ini semasa panggilan rekursif.

Penyelesaian ECMAScript 3

ECMAScript 3 memperkenalkan ungkapan fungsi bernama, menghapuskan keperluan untuk hujah.callee.

Untuk contoh:

[1,2,3,4,5].map(function factorial(n) {
     return (!(n>1))? 1 : factorial(n-1)*n;
 });
Salin selepas log masuk

Pendekatan ini menawarkan beberapa kelebihan berbanding hujah.callee:

  • Ia membenarkan fungsi dipanggil seperti yang lain.
  • Ia tidak mencemarkan ruang nama.
  • Ia mengekalkan integriti ini dalam rekursif panggilan.
  • Ia meningkatkan prestasi dengan menghapuskan overhed mengakses objek argumen.

Kesimpulan

Penyingkiran argumen.callee. pemanggil adalah penting untuk meningkatkan keupayaan pengoptimuman JavaScript dan memastikan tingkah laku yang konsisten semasa panggilan fungsi. Ungkapan fungsi bernama menyediakan alternatif yang lebih dipercayai dan cekap untuk pengulangan dan mengakses konteks panggilan.

Atas ialah kandungan terperinci Mengapakah `arguments.callee.caller` Ditamatkan dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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