मैं एक फ़ंक्शन के अंदर एक वैश्विक चर के मूल्य को कैसे बदल सकता हूं


131

मैं जावास्क्रिप्ट का उपयोग कर रहा हूं और मैं एक वैश्विक चर बनाता हूं। मैं इसे एक फ़ंक्शन के बाहर परिभाषित करता हूं और मैं एक फ़ंक्शन के अंदर से वैश्विक चर मान को बदलना चाहता हूं और इसे दूसरे फ़ंक्शन से उपयोग करना चाहता हूं, मैं यह कैसे करूं?

जवाबों:


148

फ़ंक्शन के अंदर बस चर का संदर्भ लें; कोई जादू नहीं, बस नाम का उपयोग करें। यदि यह विश्व स्तर पर बनाया गया है, तो आप वैश्विक चर को अपडेट करेंगे।

आप इस व्यवहार को स्थानीय रूप से उपयोग करके घोषित कर सकते हैं var, लेकिन यदि आप उपयोग नहीं करते हैं var, तो किसी फ़ंक्शन में उपयोग किया जाने वाला चर नाम वैश्विक होगा यदि उस चर को वैश्विक रूप से घोषित किया गया हो।

इसलिए अपने चर को हमेशा स्पष्ट रूप से घोषित करना सबसे अच्छा अभ्यास माना जाता है var। क्योंकि अगर आप इसे भूल जाते हैं, तो आप दुर्घटना से ग्लोबल्स के साथ खिलवाड़ करना शुरू कर सकते हैं। यह एक आसान गलती है। लेकिन आपके मामले में, यह बदल जाता है और आपके प्रश्न का आसान उत्तर बन जाता है।


3
यह मेरे लिए काम नहीं करता है: देश = 'foo' $ .ajax ({url: '/ some-endpoint', सफलता: फ़ंक्शन (डेटा) {देश = data.country;}}); कंसोल.लॉग (देश) // आउटपुट 'फू'
मार्क सिम्पसन

41
@MarkSimpson - इसका कारण यह है कि काम नहीं करता है क्योंकि आपके उदाहरण में, console.logतुरंत चलाया जाता है, लेकिन अजाक्स सफलता समारोह केवल कुछ बिंदु पर चलता है, जब अजाक्स कॉल वास्तव में प्रतिक्रिया देता है। यह अजाक्स की अतुल्यकालिक प्रकृति के बारे में एक मूल बिंदु है: क्लोजर फ़ंक्शन में कोड इसके चारों ओर कोड के साथ अनुक्रम में नहीं चलता है। ईवेंट-चालित कोड के बारे में सीखते समय यह समझना बहुत महत्वपूर्ण है।
स्पुडली

इस मामले में अधिक सटीक होने के लिए कंसोल को प्राप्त करने का तरीका यह है कि इसे अजाक्स सफलता फ़ंक्शन के अंदर रखा जाए।
DWils

मेरी शानदार अंतर्दृष्टि में से एक: चर नाम की वर्तनी और मामले की दोहरी जांच। सेशनआईड बनाम सेशनआईडी के रूप में कुछ सरल याद रखना बहुत आसान है।
व्हाइटबर्ड जू

मैं इन पर एक ही समस्या है। लेकिन अंत में समझ गया, धन्यवाद @Spudley!
युधिष्ठिर बायु

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20

1
इस भयानक सरल उदाहरण के लिए धन्यवाद। इस का तर्क मेरे सिर में कर रहा था। बस 4d सोच के आदी हो गया।
मिकी

29

बस उस चर के नाम का उपयोग करें।

जावास्क्रिप्ट में, चर केवल एक फ़ंक्शन के लिए स्थानीय हैं, यदि वे फ़ंक्शन के पैरामीटर (ओं) हैं या यदि आप उन्हें varचर के नाम से पहले कीवर्ड टाइप करके स्थानीय रूप से घोषित करते हैं ।

यदि स्थानीय मान का नाम वैश्विक मान के समान नाम है, तो windowऑब्जेक्ट का उपयोग करें

इस jsfiddle देखें

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

संपादित करें

ES2015 के साथ दो और कीवर्ड आए constऔर letजो एक चर के दायरे को प्रभावित करते हैं ( भाषा विशिष्टता )


1
वैश्विक और स्थानीय रूप से घोषित चर के बीच नाम टकराव का वर्णन करने और इसे एक्सेस करने के तरीके के लिए +1।
gdbj

6
<script>
var x = 2; //X is global and value is 2.

function myFunction()
{
 x = 7; //x is local variable and value is 7.

}

myFunction();

alert(x); //x is gobal variable and the value is 7
</script>

बस का उपयोग नहीं करते varसमारोह के कीवर्ड के अंदर है, तो आप के साथ सौदा करने की जरूरत नहीं हैdocument.getElementById("outside").value = x;
बेन Aubin

5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

alert("Value of 'a' outside the function " + a); //outputs 20

विंडो के साथ ['वैरिएबल नेम '] या विन्डो के नाम से आप किसी फंक्शन के अंदर एक ग्लोबल वैरिएबल की वैल्यू को संशोधित कर सकते हैं।


यह एकमात्र तरीका है जिससे मैं कोणीय घटक में वैश्विक चर मान को बदल सकता हूँ !!!
पद्मराज भट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.