المزيد عن ال function


السلام عليكم و رحمه الله تعالى و بركاته

تحدثنا فى المواضيع السابقه كثيرا عن ال function و كيفيه عمل function overloading و ال anonymous function و فوائدها ، و ذكرت انه لا يمكن الإشاره إلى الوظيفه المجهوله anonymous لأنه لا يوجد مرجع يشير إليها ، لكن هل من الممكن ان تشير ال anonymous function إلى نفسها ؟ نعم يمكنك ذلك من خلال الخاصيه arguments.callee داخل الوظيفه المجهوله ، اكثر فوائدها فى ال recursive calls و هو إستدعاء الوظيفه نفسها اكثر من مره لتنفيذ شىء معين كما يوضح الكود التالى :

(function(i){
   alert(i) ;
   --i;
   if(i>0) arguments.callee(i); // call itself 
})(5);

فى الوظيفه السابقه يتم إستدعاء الوظيفه اول مره من خارجها مع تمرير العباره 5 لها ، ثم من داخلها يتم طرح 1 من 5 كل مره تستدعى الوظيفه نفسها عن طريق callee و ذلك حتى لا تستدعى نفسها للأبد .

باقى نقطه اخيره اود الإشاره اليها و هو ان ال function يمكنها إرجاع اى شىء string او number او array او null او boolean او function او object ، لكن هنا سأركز على الاثنين الاخرين .

إرجاع الوظيفه وظيفه اخرى من داخلها يسمى currying و تستخدم غالبا من اجل الحصول على وظيفه أبسط عن طريق ملىء بعض عبارتها كما يوضح المثال البسبط التالى :

function addGenerator(num){
    return function(toAdd){
        return num + toAdd
    };
}
var addFive = addGenerator(5);
addFive(4); // 9

عند إستدعاء وظيفه addGenerator كما يوضح السطر قبل الاخير فإنه ينتج عنها الوظيفه التاليه

var addFive = function(toAdd){
    return 5 + toAdd ;
}
addFive(4); // 9

باقى مثال يوضح كيفيه إرجاع الوظيفه كائن بداخلها

function obj(n,a){
    return {name:n,age:a} ;
}
var myDetails = obj("mostafa farghaly",21);
alert(myDetails.name); // mostafa farghaly
alert(myDetails.age); // 21

الأوسمة:

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: