JavaScript Fundamentals

जावास्क्रिप्ट का पैरामीटर पासिंग समझना: मान से पास और संदर्भ से पास

Spread the love

जावास्क्रिप्ट में पैरामीटर पासिंग का तरीका अक्सर भ्रम का कारण बनता है, और इसे रेफरेंस द्वारा पासिंग या वैल्यू द्वारा पासिंग में से एक के रूप में बहस किया जाता है। वास्तविकता अधिक सूक्ष्म है: जावास्क्रिप्ट एक ऐसी पद्धति का उपयोग करता है जो दोनों के पहलुओं को मिलाती है, जो पूरी तरह से शामिल डेटा प्रकार पर निर्भर करता है।

विषयवस्तु की तालिका

प्राथमिक डेटा प्रकारों के साथ वैल्यू द्वारा पासिंग को समझना

जावास्क्रिप्ट के प्राथमिक डेटा प्रकार—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 अपरिवर्तित रहता है।

जावास्क्रिप्ट में वैल्यू द्वारा पासिंग और रेफरेंस द्वारा पासिंग का सामंजस्य

जावास्क्रिप्ट का पैरामीटर पासिंग सख्ती से एक या दूसरा नहीं है। यह एक संदर्भ-निर्भर प्रणाली है:

  • प्राथमिक प्रकार: वैल्यू द्वारा पासिंग। मान की एक प्रति पास की जाती है; आंतरिक परिवर्तन मूल को प्रभावित नहीं करते हैं।
  • ऑब्जेक्ट्स: रेफरेंस द्वारा पासिंग। ऑब्जेक्ट का एक रेफरेंस पास किया जाता है; ऑब्जेक्ट के गुणों में परिवर्तन मूल को प्रभावित करते हैं। फ़ंक्शन के अंदर पैरामीटर को एक नए ऑब्जेक्ट को पुनः असाइन करने से मूल अपरिवर्तित रहता है।

इस अंतर में महारत हासिल करना मजबूत और पूर्वानुमेय जावास्क्रिप्ट कोड लिखने के लिए महत्वपूर्ण है। व्यवहार पूरी तरह से इस बात पर निर्भर करता है कि आप प्राथमिक प्रकारों या ऑब्जेक्ट्स के साथ काम कर रहे हैं।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *