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