क्यों दो स्क्रिप्ट अलग हैं? जो मैं चाहता हूं वह पहली स्क्रिप्ट है, लेकिन दूसरे ड्रॉडाटा() में यह डेटा बदलता है, यह अजीब है। क्या कोई मुझे बता सकता है कि यह क्यों है, और इसे कैसे ठीक किया जाए। धन्यवाद!जावास्क्रिप्ट फ़ंक्शन में सरणी बदलना फ़ंक्शन के बाहर सरणी बदलता है?
var data = ["right"] ;
function drawData(arrs,type){
if(type=="percentage"){
arrs[0]="omg";
}
alert(data[0]);
}
drawData(data);
drawData(data,"percentage");
2: - तो इस परिवर्तन समारोह के बाहर देखा जाता है
var data = "right" ;
function drawData(arrs,type){
if(type=="percentage"){
arrs="omg";
}
alert(data);
}
drawData(data);
drawData(data,"percentage");
ऐसा इसलिए है क्योंकि एक वस्तु स्वयं ही है। जब कोई ऑब्जेक्ट संशोधित होता है * वह * ऑब्जेक्ट संशोधित होता है। जब किसी फ़ंक्शन पर कोई मान (ऑब्जेक्ट) पास किया जाता है तो यह ** कॉपी नहीं किया जाता है, क्लोन या डुप्लिकेट नहीं किया जाता है ** (आंतरिक रूप से विभिन्न तकनीकों का उपयोग किया जाता है, लेकिन यह अर्थात् सही है)। यही है, केवल एक सरणी है - और वह * वही * सरणी फ़ंक्शन के अंदर बदल दी गई है। यदि आप बाहर को प्रभावित करने के डर के बिना इसे बदलने में सक्षम होना चाहते हैं, तो पहले एक प्रति बनाएं। एक साधारण सरणी के लिए यह 'Array.prototype.slice' के साथ किया जा सकता है। अन्यथा, jQuery जैसी पुस्तकालयों में आसान कॉपी विधियां हैं। –
ओह, और उत्तर, ** ** कहने से पहले ** "संदर्भ द्वारा पास करें", कृपया [मूल्यांकन रणनीतियां] (http://en.wikipedia.org/wiki/Evaluation_strategy) पढ़ें और "संदर्भ" शब्द को खोजें [ईसीएमएस्क्रिप्ट विनिर्देश] (http://es5.github.com/) और अपने शब्द विकल्पों का बैक अप लेने में सक्षम हो। धन्यवाद! –
धन्यवाद, मुझे कुछ दिलचस्प मिला है [http://stackoverflow.com/](http://stackoverflow.com/questions/122102/what-is-the-most- कुशल-way-to-clone- ए-जावास्क्रिप्ट-ऑब्जेक्ट) बस जॉन रेजिग के जवाब को देखें। –