Factorial Function in JavaScript

Factorial Function in JavaScript – किसी भी Function में argumentsthis नाम के दो Special Objects Exists होते हैं। arguments Object के बारे में हम पहले ही जान चुके हैं। ये Object एक Array की तरह होता है जो Function में Pass किए जाने वाले सभी Arguments को Hold करता है।

हालांकि इस Object का मूल काम Function के Arguments को Hold करना होता है, लेकिन इस Object की भी callee नाम की अपनी एक Special Property होती है। ये Property उस Function के Pointer को Hold करता है, जिसमें argument Object होता है। यानी%

[code]
function factorial(num){
      if (num < = 1) {
            return 1;
      } else {
            return num * factorial(num-1)
      }
}
[/code]

Factorial Function को सामान्‍यत: Recursive Function के रूप में Define किया जाता है। उपरोक्त उदाहरण तब तक सामान्‍य रूप से काम करता है, जब तक कि हम इस Function का नाम Change नहीं करते।

यानी इस Function का नाम इसकी Functionality के साथ Tightly Associated है। इस Function की उसके नाम पर की इस Dependency को हम arguments.callee Statement द्वारा Remove कर सकते हैं। यानी उपरोक्त Function को हम निम्नानुसार Modify कर सकते हैं:

[code]
function factorial(num){
      if (num < = 1) {
            return 1;
      } else {
            return num * arguments.callee(num-1)
      }
}
[/code]

factorial Function के इस Version में अब ये Function अपने नाम पर निर्भर नहीं है और यदि हम Function के नाम को Change कर दें, तब भी ये Function Recursive Form में ही Execute होगा और अपने Argument यानी num का Factorial ही Return करेगा।

अब यदि हम इस factorial Variable को किसी दूसरे Function से Associate कर दें, तो ये factorial Function Factorial Calculation नहीं करेगा लेकिन यदि हम इस factorial Variable को किसी दूसरे Variable में Assign कर दें, तो वह दूसरा Variable Factorial Calculate करने लगेगा। यानी ये factorial Variable अब Actual Function Body के साथ Directly Coupled नहीं है। इस प्रक्रिया को हम निम्न Code Segment द्वारा समझ सकते हैं:

[code]
      var trueFactorial = factorial;
      factorial = function() {
            return 0;
      };

      alert(trueFactorial(5));     // Output: 120
      alert(factorial(5));         // Output: 0
[/code]

इस Code Segment में हमने factorial Function को trueFactorial() Function में Assign कर दिया है। फिर factorial Variable को एक ऐसे Function से Reassign किया है, जो 0 Return करता है।

अब यदि हम Original factorial Function को Call करते हैं, जैसाकि दूसरे alert() Function में किया गया है, तो ये Function 0 Return करता है क्योंकि अब ये Variable एक दूसरे Function Body को Represent कर रहा है जबकि trueFactorial() Function अपने Argument का Factorial Calculate कर रहा है। यानी अब वही काम trueFactorial() Function कर रहा है, जो काम पहले factorial() Function कर रहा था। जबकि factorial() Function अब दूसरा काम कर रहा है।

इस तरह से हम समझ सकते हैं कि किसी Function के arguments Object के callee Property को Use करके हम उसी Function को Refer कर सकते हैं, जिसमें Arguments को Pass किया गया है और हम Function के Code के Function के नाम पर की Dependency को arguments.callee Statement द्वारा Remove कर सकते हैं।

किसी Function का दूसरा Special Object this होता है, जो कि C++, Java व C# के this की तरह ही काम करता है। यानी JavaScript में भी this उसी Object को Refer करता है, जिसके लिए Function Call किया गया है।

दूसरे शब्दों में कहें, तो this उस Scope को Represent करता है, जिसमें Function Execute हो रहा होता है। जब किसी Function को किसी Web Page के Global Scope में Call किया जाता है, तब this Object window को Point करता है, क्योंकि एक Web Page के लिए वास्तव में window Object ही Global Scope होता है। उदाहरण के लिए निम्न Code Segment देिख,%

[code]
      window.color = “red”;
      var obj = { color: “blue”};
      function getColor() {
            alert(this.color);
      }

      getColor();                     // Output: “red”
      obj.getColor = getColor;
      obj.getColor();                 // Output: “blue”
[/code]

उपरोक्त Code Segment में getColor() Function को Globally Define किया गया है, जिसमें thisObject को Use किया गया है। this की Value तब तक निश्चित नहीं होती, जब तक कि getColor() Function को Call नहीं किया जाता। इसलिए इस this Object का Value तब तक Consistent नहीं रहता, जब तक कि पूरा Code Execute नहीं हो जाता।

जब getColor() Function Global Scope में Call होता है, तब ये Function “red” Return करता है, क्योंकि इस Scope में this, Global Object window को Reference करता है। इसलिए इस समय this.color, window.color को ही Evaluate करता है।

लेकिन जब हम इस getColor() Function को Object obj के साथ Assign कर देते हैं और फिर obj.getColor() को Call करते हैं, तब thisObject window के नहीं बल्कि obj के Scope को Represent करता है। फलस्वरूप इस बार getColor() Function का alert(this.color); Statement “blue” Display करता है।

यानी यदि हम सारांश के रूप में समझें, तो this हमेंशा Current Scope को Represent करता है। यदि this किसी Object के साथ Use होता है, तो उस Object को Represent करता है, जबकि Global Context में thiswindow Object को Represent करता है।

एक बात हमेंशा ध्‍यान रखें कि Function का नाम हमेंशा एक ऐसा Variable होता है, जो किसी Code Segment के Pointer को Hold करता है। इसलिए Global getColor() Function व obj.getColor() Function, दोनों समान Function Code को Point करते हैं, हालांकि दोनों अलग-अलग Execution Context में Execute होते हैं।

Advavnce JavaScript in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Advance JavaScript in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Advance JavaScript in Hindi | Page: 669 | Format: PDF

BUY NOW GET DEMO REVIEWS