JavaScript एक पास-बाय-वैल्यू भाषा है। लेकिन ऑब्जेक्ट्स के लिए, वैल्यू उनका रेफरेंस होती है। इसलिए उदाहरण के लिए, यदि आप एक int को पैरामीटर के रूप में फ़ंक्शन में पास करते हैं और फ़ंक्शन में इसके मान को बढ़ाते हैं, तो इसका मान कॉलर के संदर्भ में अपडेट नहीं होगा:
उदाहरण
let i = 0; function increment(x) { x = x + 1 console.log(x) } increment(i) console.log(i)
आउटपुट
1 0
जब आप कोई ऑब्जेक्ट पास करते हैं और फ़ंक्शन के संदर्भ में उस ऑब्जेक्ट के रेफरेंस को अपडेट करते हैं, तो यह ऑब्जेक्ट को प्रभावित नहीं करेगा। लेकिन यदि आप ऑब्जेक्ट के इंटर्नल्स को म्यूटेट करते हैं, तो यह ऑब्जेक्ट में प्रतिबिंबित होगा।
उदाहरण
let obj = {'foo': 'bar'}; function updateRef(x) { // x का लोकल रेफरेंस अपडेट होता है, obj को प्रभावित नहीं करता x = {} } function addHelloWorld(y) { // y द्वारा रेफरेंस्ड ऑब्जेक्ट में नई प्रॉपर्टी जोड़ें y['hello'] = 'world'; } console.log(obj) updateRef(obj) console.log(obj) addHelloWorld(obj) console.log(obj)
आउटपुट
{ foo: 'bar' } { foo: 'bar' } { foo: 'bar', hello: 'world' }
ध्यान दें कि ऑब्जेक्ट रेफरेंस परिवर्तन ने ऑब्जेक्ट को प्रभावित नहीं किया। लोकल वेरिएबल x को पुनः असाइन किया गया था। दूसरे फ़ंक्शन में हालांकि, y obj ऑब्जेक्ट को रेफरेंस कर रहा था और उस ऑब्जेक्ट की आंतरिक स्थिति को म्यूटेट किया। इसने मूल ऑब्जेक्ट में परिवर्तन किया।