| الخاصية | دالة عادية | دالة سهمية |
|---|---|---|
| الصيغة | function(){} | () => {} |
| this | ديناميكي حسب الاستدعاء | موروث من المحيط (Lexical) |
| arguments | متوفر | غير متوفر |
| الاستخدام كـ Constructor | ممكن مع new | غير ممكن |
الدوال السهمية (Arrow Functions) هي صيغة مختصرة وحديثة لكتابة الدوال، أُضيفت في ES6، وتستخدم رمز => بدلاً من الكلمة المفتاحية function. ميزتها الأساسية هي الإيجاز — يمكن كتابة دالة كاملة في سطر واحد، خاصة عند استخدامها كدوال مصغّرة يتم تمريرها كوسائط لدوال أخرى مثل map أو filter.
إذا كانت الدالة تحتوي على تعبير واحد فقط تريد إعادته، يمكن حذف الأقواس المعقوفة {} وكلمة return تماماً — تُعيد جافاسكريبت القيمة ضمنياً. وإذا كان هناك معامل واحد فقط، يمكن حذف القوسين المحيطين به أيضاً، رغم أن كثيراً من المطورين يُفضّلون إبقاءهما لوضوح أكبر.
الفرق الجوهري والأهم بين الدوال السهمية والدوال العادية هو التعامل مع this. الدالة العادية تُنشئ سياق this خاصاً بها يعتمد على كيفية استدعائها، بينما الدالة السهمية لا تملك this خاصاً بها إطلاقاً — بل "ترث" قيمة this من السياق المحيط بها وقت تعريفها (Lexical this). هذا يجعلها مثالية داخل دوال Callback حيث تريد الحفاظ على this الخاص بالكائن الأب.
بسبب هذا السلوك في this، لا يُنصح باستخدام الدوال السهمية كدوال أساليب (Methods) داخل الكائنات أو الفئات (Classes) عندما تحتاج للوصول إلى this الخاص بالكائن نفسه، لأنها ستُشير لـ this الخارجي (غالباً undefined أو window) بدلاً من الكائن. كذلك لا تملك الدوال السهمية كائن arguments الخاص بها.
| 1 | // دالة عادية مقابل دالة سهمية |
| 2 | function جمع_عادي(أ, ب) { |
| 3 | return أ + ب; |
| 4 | } |
| 5 | const جمع_سهمي = (أ, ب) => أ + ب; |
| 6 | |
| 7 | // معامل واحد بدون أقواس (اختياري) |
| 8 | const مربع = رقم => رقم * رقم; |
| 9 | |
| 10 | // جسم متعدد الأسطر يحتاج {} و return |
| 11 | const تفصيل = (أ, ب) => { |
| 12 | const ناتج = أ + ب; |
| 13 | return ناتج; |
| 14 | }; |
مثال 1: الدوال السهمية مع map و filter
| 1 | // استخدام مثالي: تمرير كدالة مصغّرة |
| 2 | const أرقام = [1, 2, 3, 4, 5]; |
| 3 | const مضاعفة = أرقام.map(رقم => رقم * 2); |
| 4 | const زوجية = أرقام.filter(رقم => رقم % 2 === 0); |
| 5 | console.log(مضاعفة); // [2, 4, 6, 8, 10] |
| 6 | console.log(زوجية); // [2, 4] |
مثال 2: سلوك this في الدوال السهمية
| 1 | // الفرق في this بين الدالة العادية والسهمية |
| 2 | const مؤقت = { |
| 3 | ثواني: 0, |
| 4 | ابدأ: function () { |
| 5 | setInterval(() => { |
| 6 | // السهمية ترث this من ابدأ، فتشير لـ مؤقت بنجاح |
| 7 | this.ثواني++; |
| 8 | console.log(this.ثواني); |
| 9 | }, 1000); |
| 10 | }, |
| 11 | }; |
| 12 | // لو استخدمنا function عادية بدل السهمية هنا، this كانت ستُشير لشيء آخر تماماً |