यहां समझने की महत्वपूर्ण बात यह है कि जावास्क्रिप्ट में सभी नाम अन्य वस्तुओं के संदर्भ हैं।
जब आप ऑब्जेक्ट शाब्दिक के साथ ऑब्जेक्ट बनाते हैं, तो बाईं ओर वाले नामों का उपयोग पहले से ही दाएं हाथ के नाम से संदर्भित वस्तुओं को संदर्भित करने के लिए किया जाता है।
इस मामले में, जब आप
blog: loca,
आप blog
कह रहे हैं जो 5. है मूल्य loca
से जाना जाता है, का उल्लेख करने के लिए क्या बाद में जब आप को बढ़ा देते loca
पर, यह 6
हो जाता है, यह इसके लिए संदर्भित करता है इसका मतलब है कुछ अन्य मूल्य, लेकिन blog
अभी भी 5
मान को संदर्भित करता है।
यही कारण है कि आपको 5
मिल रहा है।
लेकिन आप
namepace.frog()
करते हैं जब आप वर्तमान मूल्य loca
द्वारा नहीं भेजे गए हो रही है। चूंकि में 6
असाइन किया गया है, तो आपको 6
मिल रहा है।
incrementation नया नंबर वस्तु
बनाता है यह और भी स्पष्ट करने के लिए, जब आप
loca += 1;
या
loca++;
क्या आंतरिक रूप से होता है, इस
की तरह कुछ
oldValue = loca
newValue = oldValue + 1
loca = newValue
संदर्भ ECMAScript 5.1 से विशिष्टता, +=
के लिए और ++
के लिए के बाद से संख्या अपरिवर्तनीय वस्तुओं (आप 5
का मूल्य बदल सकते हैं? आप नहीं कर सकते हैं, यही कारण है कि इसे एक अपरिवर्तनीय वस्तु कहा जाता है), इसमें एक जोड़ा गया एक नया नंबर ऑब्जेक्ट बनाया गया है और नई ऑब्जेक्ट को संदर्भित करने के लिए loca
नाम बनाया गया है।
परिवर्त्य वस्तुओं
आप परिवर्तनशील वस्तुओं के बारे में सोचते हैं, तो
var namepace = (function() {
var loca = [];
return {
glob: function() {
loca.push(1);
return loca;
},
blog: loca,
frog: function() {
return loca;
}
};
})();
console.log(namepace.glob());
// [ 1 ]
console.log(namepace.blog);
// [ 1 ]
console.log(namepace.frog());
// [ 1 ]
अब, दोनों blog
और loca
एक ही सरणी वस्तु देखें। glob
में क्या होता है पर उत्परिवर्तित कहा जाता है।आप केवल दो तत्व blog
और loca
के साथ संदर्भित सरणी ऑब्जेक्ट में एक तत्व जोड़ रहे हैं। यही कारण है कि namepace.blog
भी [ 1 ]
प्रिंट करता है।