जावास्क्रिप्ट एक पास बाय वैल्यू लैंग्वेज है। लेकिन वस्तुओं के लिए, मूल्य उनका संदर्भ है। उदाहरण के लिए, यदि आप किसी फ़ंक्शन को पैरामीटर के रूप में एक इंट पास करते हैं और फ़ंक्शन में इसके मान को बढ़ाते हैं, तो इसका मान कॉलर के संदर्भ में अपडेट नहीं किया जाएगा -
उदाहरण
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's local ref gets updates, doesn't affect obj x = {} } function addHelloWorld(y) { // Add new prop to object referenced by 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 ऑब्जेक्ट को संदर्भित कर रहा था और उस ऑब्जेक्ट की आंतरिक स्थिति को बदल दिया। इससे मूल वस्तु में परिवर्तन हुआ।