المزيد عن ال function

By mostafa farghaly

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

تحدثنا فى المواضيع السابقه كثيرا عن ال 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

الأوسمة:

اترك رد