जावास्क्रिप्ट में पैरामीटर पासिंग का तरीका अक्सर भ्रम का कारण बनता है, और इसे रेफरेंस द्वारा पासिंग या वैल्यू द्वारा पासिंग में से एक के रूप में बहस किया जाता है। वास्तविकता अधिक सूक्ष्म है: जावास्क्रिप्ट एक ऐसी पद्धति का उपयोग करता है जो दोनों के पहलुओं को मिलाती है, जो पूरी तरह से शामिल डेटा प्रकार पर निर्भर करता है।
विषयवस्तु की तालिका
- प्राथमिक डेटा प्रकारों के साथ वैल्यू द्वारा पासिंग को समझना
- ऑब्जेक्ट्स के साथ रेफरेंस द्वारा पासिंग को समझना
- जावास्क्रिप्ट में वैल्यू द्वारा पासिंग और रेफरेंस द्वारा पासिंग का सामंजस्य
प्राथमिक डेटा प्रकारों के साथ वैल्यू द्वारा पासिंग को समझना
जावास्क्रिप्ट के प्राथमिक डेटा प्रकार—number
, string
, boolean
, null
, undefined
, bigint
, और symbol
—वैल्यू द्वारा पासिंग का उपयोग करते हैं। जब एक प्राथमिक डेटा प्रकार को किसी फ़ंक्शन में पास किया जाता है, तो उसके मान की एक प्रति बनाई जाती है और पास की जाती है। फ़ंक्शन के अंदर किए गए संशोधन केवल इस प्रति को प्रभावित करते हैं, मूल चर को अछूता छोड़ देते हैं।
let x = 10;
function changeValue(y) {
y = 20;
}
changeValue(x);
console.log(x); // आउटपुट: 10
इस उदाहरण में, changeValue
के अंदर y
को बदलने से मूल x
में बदलाव नहीं होता है।
ऑब्जेक्ट्स के साथ रेफरेंस द्वारा पासिंग को समझना
जावास्क्रिप्ट में ऑब्जेक्ट्स (एरे और फ़ंक्शन सहित) अलग तरह से व्यवहार करते हैं। जब किसी ऑब्जेक्ट को किसी फ़ंक्शन में पास किया जाता है, तो जो पास किया जाता है वह एक रेफरेंस होता है—ऑब्जेक्ट के मेमोरी लोकेशन का एक पॉइंटर। इसलिए, ऑब्जेक्ट के गुणों में फ़ंक्शन के *अंदर* किए गए कोई भी संशोधन सीधे मूल ऑब्जेक्ट को प्रभावित करते हैं।
let myArray = [1, 2, 3];
function modifyArray(arr) {
arr.push(4);
}
modifyArray(myArray);
console.log(myArray); // आउटपुट: [1, 2, 3, 4]
यहाँ, myArray
संशोधित होता है क्योंकि फ़ंक्शन ऑब्जेक्ट को स्वयं बदलता है, न कि उसकी प्रति को।
हालांकि, एक महत्वपूर्ण अंतर मौजूद है: फ़ंक्शन के अंदर पैरामीटर को एक *नए* ऑब्जेक्ट को पुनः असाइन करने से *मूल* में संशोधन नहीं होता है।
let myObject = { a: 1 };
function reassignObject(obj) {
obj = { a: 2 }; // एक नए ऑब्जेक्ट को असाइन करना
}
reassignObject(myObject);
console.log(myObject); // आउटपुट: { a: 1 }
reassignObject
के अंदर, obj
एक अलग ऑब्जेक्ट की ओर इशारा करता है; मूल myObject
अपरिवर्तित रहता है।
जावास्क्रिप्ट में वैल्यू द्वारा पासिंग और रेफरेंस द्वारा पासिंग का सामंजस्य
जावास्क्रिप्ट का पैरामीटर पासिंग सख्ती से एक या दूसरा नहीं है। यह एक संदर्भ-निर्भर प्रणाली है:
- प्राथमिक प्रकार: वैल्यू द्वारा पासिंग। मान की एक प्रति पास की जाती है; आंतरिक परिवर्तन मूल को प्रभावित नहीं करते हैं।
- ऑब्जेक्ट्स: रेफरेंस द्वारा पासिंग। ऑब्जेक्ट का एक रेफरेंस पास किया जाता है; ऑब्जेक्ट के गुणों में परिवर्तन मूल को प्रभावित करते हैं। फ़ंक्शन के अंदर पैरामीटर को एक नए ऑब्जेक्ट को पुनः असाइन करने से मूल अपरिवर्तित रहता है।
इस अंतर में महारत हासिल करना मजबूत और पूर्वानुमेय जावास्क्रिप्ट कोड लिखने के लिए महत्वपूर्ण है। व्यवहार पूरी तरह से इस बात पर निर्भर करता है कि आप प्राथमिक प्रकारों या ऑब्जेक्ट्स के साथ काम कर रहे हैं।