आह ... रिकर्सन के कार्यात्मक रूप .... [[[विज्ञान विज्ञान कक्षा के लिए फ्लैशबैक]]]
आप एक सहायक समारोह इस्तेमाल कर सकते हैं:
function X(f) { return f.apply(this, arguments); }
X(function(me, n) { return n<=1 ? n : n*me(me,n-1); }, 6);
(जो 720 रिटर्न; इस भाज्य समारोह, प्रत्यावर्तन के विहित उदाहरण)
यह बदले में उसकी गुमनाम किया जा सकता है:
(function (f) { return f.apply(this, arguments); })(
function(me, n) { return n<=1 ? n : n*me(me,n-1); },
6);
या विशेष एक तर्क के कार्यों के लिए, से बचने के लिए apply
और arguments
:
(function (f,x) { return f(f,x); })(
function(me, n) { return n<=1 ? n : n*me(me,n-1); },
6);
(जिनमें से दोनों 720 भी लौटते हैं)
एक सहायक फ़ंक्शन का उपयोग करने की यह चाल आपके फ़ंक्शन को प्राप्त करने की अनुमति देती है एल्फ अपने पहले तर्क के रूप में, और इस तरह खुद को बुलाओ।
अपने उदाहरण अनुकूलन करने के लिए:
(function (f,x) { return f(f,x); })(
function(me, i) { console.log(i); if (i<5) me(me,i+1); },
0)
जो Firebug में अपेक्षा के अनुरूप (लॉग 0,1,2,3,4,5 सांत्वना देने)
** ** सबसे अच्छी ** बात यह है कि यह एक अज्ञात फ़ंक्शन न हो, बल्कि इसके बजाय फ़ंक्शन घोषणा विवरण के साथ परिभाषित एक फ़ंक्शन है। – Pointy