English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تحليل هذا المثال لأجراء العمليات المتكررة في جافا سكريبت. نشارككم هذا للمساهمة في المعلومات، ويتمثل فيما يلي:
المشكلة
تكرار بسيط، لحساب ناقص n:
function factorial(n) { if (n<=1) { return 1; } else { return factorial(n-1)*n; } }
إذا تم استخدامه كما يلي، فإنه سيكون هناك خطأ:
var fcopy = factorial; factorial = null; alert(fcopy(3));
بسبب أن وحدة الوظيفة التي يشير إليها fcopy قد استدعت factorial، وقد تم إطلاق factorial.
حل المشكلة
استخدام arguments.callee
عندما يدخل تدفق التنفيذ إلى الدالة يتم إنشاء بيئة التشغيل للدالة (سلسلة البيئات وغيرها)، بما في ذلك العنصر الخاص arguments، لديه خاصية تشير إلى الدالة نفسها: arguments.callee .
function factorial(n) { if (n<=1) { return 1; } else { return arguments.callee(n-1)*n; } }
لكن callee غير متاح في الوضع الصارم.
استخدام تعبير الدالة
var factorial = (function f(n) { if (n<=1) { return 1; } else { return f(n-1)*n; } )
ليس هناك أي تكنولوجيا جديدة مستخدمة، بل هو تطبيق لفكرة قديمة، عند تعريف factorial، يتم إنشاء دالة مباشرة، ثم يتم تخصيص إشارة الدالة هذه إلى factorial.
يمكنك العثور على المزيد من المعلومات المتعلقة بـ JavaScript لقراء مهتمين بزيارة موضوعات هذا الموقع: 'تحليل وتقنيات التدوير لـ JavaScript'، 'تحليل تقنيات التغيير لـ JavaScript'، 'تحليل استخدام العمليات الحسابية لـ JavaScript'، 'تحليل بنية البيانات والخوارزميات لـ JavaScript'، 'تحليل تأثيرات التأثيرات والأساليب لـ JavaScript'، 'تحليل خوارزميات البحث لـ JavaScript'، 'تحليل تأثيرات الرسوم المتحركة لـ JavaScript'، و 'تحليل تقنيات الخطأ والتحقق من البرامج لـ JavaScript'.
آمل أن يساعدك ما ذكرته في هذا المقال في تصميم برامج JavaScript الخاصة بك.
البيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع المالك الأصلي بحقوق الطبع والنشر، ويتم جمع المحتوى من قبل المستخدمين عبر الإنترنت بطرقهم الخاصة، ويستخدم هذا الموقع المحتوى دون امتلاك حقوق الملكية، ولا يتم تعديل المحتوى بشكل إنساني، ولا يتحمل الموقع أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' بـ '@') لإبلاغنا، وقدم الأدلة ذات الصلة، وسنقوم بإزالة المحتوى المزعوم عن حقوق النسخ فور التحقق من ذلك.