تعتبر وظائف الأسهم أنظف وأبسط من بدائلها العادية الطويلة ، ولكن يجب ألا تتسرع في استخدامها دون معرفة كيفية عملها.
وصل بناء جملة وظيفة السهم مع إصدار ECMAScript 2015 ، المعروف أيضًا باسم ES6. اليوم ، أصبحت وظائف الأسهم الميزة المفضلة للعديد من مبرمجي JavaScript. يرجع هذا الحب لوظائف السهم إلى التركيب المختصر والسلوك المباشر للكلمة الرئيسية "هذه".
لكن وظائف السهم لها بعض العيوب. تعرف على الاختلافات الرئيسية بين وظائف الأسهم والوظائف العادية واكتشف لماذا ، في معظم الحالات ، من الأفضل لك الالتزام بالوظائف العادية.
1. يجب تحديد دالة السهم قبل استخدامها
لا يمكنك رفع وظيفة السهم. قواعد الرفع الافتراضية لجافا سكريبت تسمح لك باستدعاء دالة قبل تعريفها ، ولكن هذا ليس هو الحال مع وظائف الأسهم. إذا كان لديك ملف JavaScript بوظائف ، فهذا يعني أن جميع التعليمات البرمجية المهمة ستكون أسفل الملف.
ضع في اعتبارك رمز JavaScript التالي على سبيل المثال:
مقدار ثابت doubleNumbers = (أرقام) {
أرقام خريطة (ن => ن * 2)
}مقدار ثابت halveNumbers = (أرقام) {
أرقام خريطة (ن => ن / 2)
}مقدار ثابت sumNumbers = (أرقام) {
أرقام. تقليل ((مجموع) => {
يعود مجموع + ن ؛
}, 0)
}
مقدار ثابت أرقام = [1, 20, 300, 700, 1500]
مقدار ثابت مضاعفة = doubleNumbers (أرقام)
وحدة التحكم.log (halveNumbers (مضاعفة))
وحدة التحكم.log (sumNumbers (أرقام))
في كتلة التعليمات البرمجية أعلاه ، يكون الرمز المهم في الأسفل. يتم تحديد جميع الوظائف المساعدة قبل نقطة التنفيذ. الحاجة الى إنشاء وظائف JavaScript الخاصة بك في الجزء العلوي من الملف قد يكون غير مريح لأنه سيتعين عليك التمرير لأسفل لرؤية الكود الفعلي الذي يقوم بالعمل.
إذا قمت بنقل وظائف المساعد إلى الأسفل والرمز الفعلي إلى الأعلى ، فسوف تحصل على خطأ مرجعي. وقت التشغيل يعامل الوظيفة كمتغير. وبالتالي ، يجب عليك تعريفه أولاً قبل الوصول إليه أو الاستدعاء إليه. ولكن إذا قمت بتحويل جميع وظائف الأسهم إلى وظائف عادية (باستخدام امتداد وظيفة الكلمة الرئيسية) ، فستعمل التعليمات البرمجية الخاصة بك بشكل جيد. في الوقت نفسه ، يظل الرمز المهم في الأعلى حيث يمكنك تحديد موقعه.
هذه واحدة من أكبر المشكلات المتعلقة باستخدام وظائف الأسهم. لا يظهرون أي سلوك استضافة. بمعنى آخر ، يجب عليك تحديدها قبل المكان الفعلي الذي ستستخدمها فيه. من ناحية أخرى ، يمكنك رفع الوظائف العادية.
2. قد تكون وظائف السهم محيرة لبعض الناس
سبب آخر لاستخدام الوظائف العادية بدلاً من وظائف الأسهم هو سهولة القراءة. الوظائف العادية أسهل في القراءة لأنها تستخدم بشكل صريح ملحق وظيفة كلمة رئيسية. تحدد هذه الكلمة الأساسية أن الشفرة المعنية هي وظيفة.
من ناحية أخرى ، تقوم بتعيين وظائف السهم للمتغيرات. بصفتك مبتدئًا ، قد يربك هذا الأمر في التفكير في أن الكود متغير وليس وظيفة.
قارن بين الوظيفتين أدناه:
مقدار ثابت الأعداد النصفية = (أعداد) => {
يعود أرقام خريطة (ن => ن / 2)
}
وظيفةالنصف(أعداد) {
يعود أرقام خريطة (ن => ن / 2)
}
للوهلة الأولى ، يمكنك بسهولة معرفة أن الجزء الثاني من التعليمات البرمجية عبارة عن وظيفة. يوضح بناء الجملة أن الشفرة هي وظيفة. ومع ذلك ، فإن أول واحد غامض - قد لا تتمكن بسهولة من معرفة ما إذا كان متغيرًا أم دالة.
3. لا يمكنك استخدام وظائف الأسهم كطرق
عند استخدام وظيفة السهم ، فإن ملف هذا الكلمة الأساسية تتوافق مع كل ما هو خارج الشيء الذي نحن بداخله. في معظم الحالات ، يكون هذا هو كائن النافذة.
ضع في اعتبارك الكائن التالي:
مقدار ثابت شخص = {
الاسم الأول: "كايل",
اسم العائلة: "يطبخ",
إطبع الإسم: () => {
وحدة التحكم.سجل(`${هذا.الاسم الأول}``${هذا.اسم العائلة}` )
}
}
person.printName ()
إذا قمت بتشغيل الكود ، فستلاحظ أن المتصفح يقوم بالطباعة غير معرف لكل من الاسم الأول واسم العائلة. نظرًا لأننا نستخدم وظيفة السهم ، هذا الكلمة الأساسية تتوافق مع كائن النافذة. أيضا ، لا يوجد الاسم الأول أو اسم العائلة خاصية محددة هناك.
لحل هذه المشكلة ، تحتاج إلى استخدام دالة عادية بدلاً من ذلك:
مقدار ثابت شخص = {
الاسم الأول: "كايل",
اسم العائلة: "يطبخ",
إطبع الإسم: وظيفة() {
وحدة التحكم.سجل(`${هذا.الاسم الأول}``${هذا.اسم العائلة}` )
}
}
person.printName ()
هذا سوف يعمل بشكل جيد لأن هذا بالعودة الى شخص هدف. إذا كنت ستفعل هذا النوع من البرمجة الموجهة للكائنات كثيرًا ، فستحتاج إلى التأكد من أنك تستخدم وظائف عادية. لن تعمل وظائف الأسهم.
متى تستخدم وظائف السهم
استخدم وظائف السهم بشكل أساسي في الأماكن التي تحتاج فيها إلى وظيفة مجهولة. مثال على مثل هذا السيناريو هو التعامل مع وظيفة رد الاتصال. من الأفضل استخدام وظيفة السهم عند كتابة رد اتصال لأن بناء الجملة أبسط بكثير من كتابة وظيفة كاملة.
قارن هذين وقرر أيهما أكثر وضوحًا:
وظيفةالنصف(أعداد) {
يعود أرقام خريطة (ن => ن / 2)
}
وظيفةالنصف(أعداد) {
يعود أرقام خريطة (وظيفة(ن) {
يعود ن / 2
})
}
تمرر كلتا الحالتين وظيفة رد الاتصال إلى طريقة map (). لكن رد النداء الأول هو وظيفة سهم بينما الثاني هو وظيفة كاملة. يمكنك أن ترى كيف تشغل الوظيفة الأولى عددًا أقل من أسطر التعليمات البرمجية مقارنةً بالوظيفة الثانية: ثلاثة مقابل. خمسة.
الوقت الآخر لاستخدام وظائف السهم هو عندما تريد التعامل مع صيغة معينة "هذا". سيتغير كائن "هذا" بناءً على ما إذا كنت تستخدم وظائف عادية أو وظائف سهم لأشياء معينة.
تقوم كتلة التعليمات البرمجية التالية بتسجيل اثنين من مستمعي الحدث "click" على كائن المستند. يستخدم المثيل الأول وظيفة عادية مثل رد الاتصال ، بينما يستخدم المثيل الثاني وظيفة السهم. داخل كلا الاسترجاعات ، يسجل الرمز كائن التنفيذ (هذا) وهدف الحدث:
وثيقة.addEventListener ("انقر", وظيفة(ه) {
وحدة التحكم.سجل("وظيفة", هذا، e.target)
})
وثيقة.addEventListener ("انقر"، (هـ) => {
وحدة التحكم.سجل("سهم", هذا، e.target)
})
إذا كنت ستقوم بتشغيل هذا النص البرمجي ، فستلاحظ أن مرجع "هذا" مختلف لكليهما. بالنسبة للدالة العادية ، تشير هذه الخاصية إلى المستند ، وهو نفس ملف ه. الهدف ملكية. ولكن بالنسبة لوظيفة السهم ، يشير هذا إلى كائن النافذة.
عندما تستخدم دالة عادية كإعادة اتصال ، فإن هذا سيشير إلى العنصر الذي نشغل فيه الحدث. ولكن عند استخدام وظيفة السهم ، فإن هذه الكلمة الأساسية تكون افتراضية على كائن النافذة.
تعرف على المزيد حول وظائف السهم مقابل الوظائف العادية
هناك العديد من الاختلافات الدقيقة الأخرى بين الوظائف العادية ووظائف الأسهم. يعد إتقان كلا النوعين من الوظائف أمرًا أساسيًا لاكتساب التمكن من JavaScript. تعلم متى تستخدم أحدهما ومتى تستخدم الآخر ؛ ستفهم بعد ذلك الآثار المترتبة على استخدام وظيفة عادية أو وظيفة سهم في جافا سكريبت.