पास बाय वैल्यू
पास बाय वैल्यू में, फंक्शन को सीधे वेरिएबल के मान को आर्गुमेंट के रूप में पास करके कॉल किया जाता है। फंक्शन के अंदर आर्गुमेंट को बदलने से फंक्शन के बाहर से पास किया गया वेरिएबल प्रभावित नहीं होता। जावास्क्रिप्ट हमेशा पास बाय वैल्यू होता है इसलिए वेरिएबल के मान को बदलने से कभी भी अंतर्निहित प्रिमिटिव (स्ट्रिंग या नंबर) नहीं बदलता।
निम्नलिखित उदाहरण में, वेरिएबल 'a' को मान 1 निर्दिष्ट किया गया है। लेकिन फंक्शन 'change' के अंदर इसे मान 2 निर्दिष्ट किया गया। चूंकि जावास्क्रिप्ट हमेशा पास बाय वैल्यू है, प्रदर्शित आउटपुट '1' होगा लेकिन '2' नहीं।
उदाहरण
<html> <body> <script> let a = 1; let change = (val) => { val = 2 } change(a); document.write(a); </script> </body> </html>
आउटपुट
1
पास बाय रेफरेंस
कुछ उदाहरण ऐसे होते हैं जिनमें फंक्शन को कॉल करने के लिए आर्गुमेंट्स के बजाय एड्रेस पास किया जाता है। उस समय, फंक्शन के अंदर मान बदलने से फंक्शन के बाहर से पास किया गया वेरिएबल प्रभावित होता है। इसे पास बाय रेफरेंस कहा जाता है। जावास्क्रिप्ट में ज्यादातर सरणी और ऑब्जेक्ट पास बाय रेफरेंस का पालन करते हैं।
निम्नलिखित उदाहरण में फंक्शन 'change' के बाहर 'a' नामक एक ऑब्जेक्ट घोषित किया गया है। यहां ध्यान देना चाहिए कि वेरिएबल 'a' का म्यूटेशन हुआ है लेकिन इसे मान 2 निर्दिष्ट नहीं किया गया, जैसा कि उदाहरण 2 में दिखाया गया है। पास बाय रेफरेंस तब होता है जब म्यूटेशन हुआ हो।
उदाहरण-1
<html> <body> <script> let a = {num:1}; let change = (val) => { val.num = 2 } change(a); document.write(JSON.stringify(a)); </script> </body> </html>
आउटपुट
{"num":2}
निम्नलिखित उदाहरण में म्यूटेशन के बजाय, वेरिएबल 'a' को मान 2 असाइन किया गया। इसलिए पास बाय वैल्यू होता है और बाहर के वेरिएबल पर कोई प्रभाव नहीं पड़ेगा।
उदाहरण-2
<html> <body> <script> let a = {num : 1}; let change = (val) => { val = {num :2}; } change(a); document.write(JSON.stringify(a)); </script> </body> </html>
आउटपुट
{"num":1}