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

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

DDD
DDDasal
2024-11-12 10:17:02561semak imbas

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);

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;
 });

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;
 });

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!

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