Function Type in JavaScript – ECMAScript का एक सबसे महत्वपूर्ण हिस्सा Function हैं क्योंकि ECMAScript में Functions मूल रूप से Objects होते हैं। ECMAScript में हर Function, Function Type का एक Object होता है, जिसके विभिन्न अन्य Reference Type की तरह ही Properties व Methods होते हैं।
चूंकि ECMAScript में Functions भी Object होते हैं, इसलिए Function के नाम वास्तव में केवल Function Object के Reference होते हैं और Function को Define करते समय Function की Body के साथ Function के नाम को Specify करना जरूरी नहीं होता। उदाहरण के लिए हम किसी Function को निम्नानुसार Specify करते हैं:
[code] function sum (num1, num2) { return num1 + num2; } [/code]
इस Function Definition को हम निम्नानुसार भी Specify कर सकते हैं:
[code] var sum = function (num1, num2) { return num1 + num2; }; // Semicolon is compulsory [/code]
इस Code में हमने sum नाम का एक Variable Create किया है और उसे sum नाम के एक Function Object से के Reference से Initialize किया है।
हम देख सकते हैं कि इस Code में हमने Function का कोई नाम Specify नहीं किया है, और हम ऐसा इसलिए कर सकते हैं क्योंकि अन्य Programming Languages की तरह ECMAScript में Function के नाम को Specify करना जरूरी नहीं है, बल्कि ECMAScript में हम इस Function को Variable sum द्वारा Reference कर सकते हैं। इसे हम एक प्रकार से “C” Programming के “Pointer to Function” की तरह समझ सकते हैं।
साथ ही ध्यान देने वाली बात ये भी है कि जब हम किसी Function को इस Format में Create करते हैं, तब Function के Closing Curly Braces के बाद Semicolon का प्रयोग करना जरूरी होता है।
इन दो तरीकों के अलावा हम Functions को एक तीसरे तरीके का प्रयोग करके भी Create कर सकते हैं। इस तीसरे तरीके में हमें Function Constructor को Use करना होता है, जो कि कितनी भी संख्या में Arguments Accept कर सकता है।
इस Constructor का अन्तिम Argument हमेंशा Function की Body को Represent करता है। उदाहरण के लिए यदि हम उपरोक्त Function को ही Function Constructor का प्रयोग करके Create करना चाहें, तो हमें निम्न Statement लिखना होगा-
[code] var sum = new Function("num1", "num2", "return num1+num2"); [/code]
हालांकि ये एक Valid Function Definition है, लेकिन हमें कभी भी इस तरीके से Function को Define नहीं करना चाहिए, क्योंकि इस प्रकार का Function Definition दो बार Interpret होता है। पहली बार Regular ECMAScript Codes के लिए और दूसरी बार Constructor में Pass की गई Strings के लिए।
फिर भी उपरोक्त Code द्वारा सबसे महत्वपूर्ण रूप से समझने वाली बात ये है कि ECMAScript में Function भी एक प्रकार का Object होते हैं, इसीलिए हम Functions को उपरोक्त Statement द्वारा उसी तरह से Create कर सकते हैं, जिस तरह से हम अन्य प्रकार के Objects या Reference Types जैसे कि Array, RegExp आदि को Create करते हैं।
चूंकि ECMAScript में Functions के नाम सामान्यत: Pointer to Functions होते हैं, इसलिए ये नाम किसी भी ऐसे Variable की तरह काम करते हैं, जिसमें किसी Object का Pointer Stored होता है।
इसका मतलब ये हुआ कि हम एक ही Function के एक से ज्यादा नाम Specify कर सकते हैं, ठीक उसी तरह से जिस तरह से किसी एक Object के Reference को कई Variables में Store किया जा सकता है। इस प्रक्रिया को हम निम्न उदाहरण द्वारा समझ सकते हैं:
[code] function sum(num1, num2){ return num1 + num2; } alert(sum(10,10)); //Output: 20 var anotherSum = sum; alert(anotherSum(10,10)); //Output: 20 sum = null; alert(anotherSum(10,10)); //Output: 20 [/code]
जैसाकि हम देख सकते हैं कि उपरोक्त Code sum() नाम का एक Function Define करता है और उस Function में Argument के रूप में आने वाले दो मानों को जोडकर उनका जोड Return करता है।
जब पहली बार Alert Statement में इस Function के दोनों Arguments में मान 10 Input किया जाता है, तो ये Function Output के रूप में मान 20 Return करता है, जो कि इस Function की एक Valid व Simple प्रक्रिया है और इसी काम को करने के लिए इस Function को Define किया गया है।
लेकिन फिर हमने anotherSum नाम का एक Variable Create किया और उस Variable में Value के रूप में sum को Initialize कर दिया, जबकि sum एक Function है।
चूंकि ECMAScript में हर Function एक Object होता है और हम किसी एक Object के Reference को किसी दूसरे Variable में Initialize कर सकते हैं, इसलिए इस anotherSum Variable में हम sum को Initialize कर सकते हैं। क्योंकि वास्तव में sum कोई Function नहीं बल्कि एक Variable है, जो किसी Function Object के Pointer को Hold कर रहा है।
चूंकि इस sum नाम के Variable में किसी Function का Pointer है, इसलिए हम इस Pointer को किसी दूसरे Variable में भी Store कर सकते हैं और यही हमने anotherSum Variable के साथ किया गया है।
अब क्योंकि जो मान sum में है, वही मान anotherSum में है, इसलिए जिस तरह से हमने sum नाम के Variable के Through Function में Argument Pass करके Function को Call किया था, उसी तरह से हम anotherSum नाम के Function में भी Arguments Pass करके उसी Function को Call कर सकते हैं, जिसे sum द्वारा Call किया था दो संख्याओं की जोड Return करवा सकते हैं।
अगले Statement में हमने sum को null Assign कर दिया है। जब हम किसी ऐसे Variable में null Assign कर देते हैं, जो कि किसी Reference को Hold कर रहा होता है, तो वह Variable उस Object को Refer करना बन्द कर देता है। फलस्वरूप अब sum नाम का Variable उस Code Segment को Point नहीं कर रहा है, जो जोड करने का काम करता है।
लेकिन क्योंकि हमने sum को null Assign करने से पहले उसका Reference anotherSum नाम के एक दूसरे Variable में Store कर दिया था, इसलिए anotherSum द्वारा हम अभी भी उस जोड करने वाले Code Segment को Refer कर सकते हैं।
इसीलिए sum को null Assign कर देने के बाद भी anotherSum Variable द्वारा हमने अन्तिम Alert Statement में दो संख्याओं को Argument के रूप में Pass किया है और समान Summation Code Execution के कारण दो संख्याओं की जोड Return हुई है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance JavaScript in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance JavaScript in Hindi | Page: 669 | Format: PDF