arguments.callee

من موسوعة حسوب
مراجعة 04:05، 17 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الخاصية arguments.callee تشير إلى الدالة التي تُنفَّذ حاليًا.

الوصف

الخاصية callee التابعة للكائن arguments تُشير إلى الدالة التي تُنفَّذ حاليًا داخل جسم تلك الدالة، وهذا مفيدٌ في حال كان اسم الدالة ليس معروفًا، مثل تعابير تعريف الدوال دون اسم (يُطلَق عليها أيضًا اسم «الدوال المجهولة» [anonymous functions]).

تحذير: الإصدار الخامس من ECMAScript (أي ES5) يمنع استخدام الخاصية arguments.callee في نمط strict، تفادى استخدام هذه الخاصية بإعطاء اسم لتعابير تعريف الدوال أو التصريح عن دالة باستخدام تعابير التصريح عن الدوال.

أمثلة

استخدام arguments.callee في دالة مجهولة تعاودية

يجب أن تستطيع الدوال التعاودية (recursive functions) أن تشير إلى نفسها، وعادةً تُشير الدالة إلى نفسها باسمها، لكن في حالة الدوال المجهولة (كالتي أنُشِئ من تعبير تعريف الدوال أو الدالة البانية Function) فلن يكون لها اسم؛ وبالتالي إن لم تملك وصولًا إلى المتغير الذي يُشير إليها، فستكون الطريقة الوحيدة التي تستطيع الدالة أن تُشير فيها إلى نفسها هي باستخدام الخاصية arguments.callee.

المثال الآتي يُعرِّف دالةً التي تُعيد دالةً أخرى التي تستدعي نفسها تعاوديًا، لاحظ أنَّ المثال الآتي غير عملي، ويمكن الاستعاضة عنه بتعابير تعريف الدوال مع تحديد اسم للدالة:

function create() {
   return function(n) {
      if (n <= 1)
         return 1;
      return n * arguments.callee(n - 1);
   };
}

var result = create()(5); // 120 (5 * 4 * 3 * 2 * 1)

استخدام arguments.callee دون بدائل

في المثال الآتي لا توجد بدائل أفضل من استخدام الخاصية arguments.callee:

function createPerson(sIdentity) {
    var oPerson = new Function('alert(arguments.callee.identity);');
    oPerson.identity = sIdentity;
    return oPerson;
}

var john = createPerson('Bashir Ameen');

john();

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم 6 نعم نعم

مصادر ومواصفات