आप कुछ उर्फ सकता है डेटा प्रकार पर निर्भर करता है। ऑब्जेक्ट्स, सरणी, और फ़ंक्शंस को संदर्भित किया जाएगा और एलियासिंग संभव है। अन्य प्रकार अनिवार्य रूप से परमाणु हैं, और चर मूल्य के संदर्भ के बजाय मूल्य को स्टोर करता है।
arguments.callee एक फ़ंक्शन है, और इसलिए आप इसका संदर्भ ले सकते हैं और साझा ऑब्जेक्ट को संशोधित कर सकते हैं।
function foo() {
var self = arguments.callee;
self.myStaticVar = self.myStaticVar || 0;
self.myStaticVar++;
return self.myStaticVar;
}
ध्यान दें कि यदि उपरोक्त कोड में आप self = function() {return 42;};
कहने के लिए थे तो self
तो एक अलग वस्तु को arguments.callee
से जो foo
के लिए एक संदर्भ रहता उल्लेख करता है,। जब आपके पास कंपाउंड ऑब्जेक्ट होता है, तो असाइनमेंट ऑपरेटर संदर्भ को प्रतिस्थापित करता है, यह निर्दिष्ट ऑब्जेक्ट को नहीं बदलता है। परमाणु मूल्यों के साथ, y++
जैसे केस y = y + 1
के बराबर है, जो चर के लिए 'नया' पूर्णांक असाइन कर रहा है।
स्रोत
2009-11-06 12:11:03
सरल उत्तर नहीं है। लेकिन मुझे एहसास है कि एसओ में कोई ऐसा करने के लिए एक हैक के साथ आएगा :) – Amarghosh