Javascript global variable updates when it shouldn't -


उस कोड में:

  window.g_b_editEnable = false; Window.g_a_PreEditData = 'हैलो'; फ़ंक्शन EditRow (EditButton) {if (! Window.g_b_editEnable) {window.g_b_editEnable = true; Var a_i_Pos = a_o_table.fnGetPosition (EditButton.parentNode); एडाटा = a_o_table.fnGetData (a_i_Pos [0]); console.log (window.g_a_PreEditData); Window.g_a_PreEditData = a डेटा; console.log (window.g_a_PreEditData); एडाटा [0] = '& lt; बटन प्रकार = सबमिट नाम = सहेजें & gt; सहेजें & lt; / बटन & gt; बटन पर क्लिक करें = ResetTableFields (यह) नाम = रीसेट & gt; रीसेट करें & lt; / button & gt;'; के लिए (गणना = 1; गिनती & lt; aData.length; count ++) {aData [count] = '& lt; इनपुट प्रकार = टेक्स्ट मान =' + एडाटा [गणना] + '& gt; & lt; / input & gt;'; } A_o_table.fnUpdate (aData, a_i_Pos [0], अपरिभाषित, गलत, गलत); console.log (window.g_a_PreEditData); } और {वापसी 1; }}  

मैं एक मान को स्टोर करने के लिए एक वैश्विक चर (window.g_a_PreEditData) का उपयोग करने की कोशिश करता हूं, जिससे इसे किसी दूसरे फ़ंक्शन पर भेज दिया जा सके।

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

कंसोल लॉग निम्न हैं: नमस्कार (प्रारंभिक रूप में दिया जाने वाला मान) Value1 (स्थानीय चर का मान) Value2 (इसे स्थानीय वैरिएबल के बाद अपडेट किया गया है)

जब मैं चाहेंगे: नमस्कार Value1 Value1

बेशक, अगर मैं एक नया चर घोषित करता हूं और वहां पर संशोधनों को संग्रहीत करता हूं (उदाहरण के लिए 'aNewData' नामक सरणी) और वह उस वेरिएबल में है जिसे मैं अपडेट किया गया मान संग्रहीत करता हूं तब से एडिटा संशोधित नहीं किया जा रहा है, यह ठीक काम करता है और वैश्विक वैरिएबल window.g_a_PreEditData या तो अद्यतन नहीं है, लेकिन ... ऐसा क्यों होता है? मैंने सोचा था कि जावास्क्रिप्ट ने मूल्य के आधार पर चर को पारित करने के लिए काम किया, न कि संदर्भ से, इसलिए जब वैश्विक वैरिएबल स्थानीय स्तर के मूल्यों के साथ लोड हो जाने पर, कोई भी बात नहीं है कि मैं स्थानीय चर में कितने परिवर्तन करता हूं, वैश्विक नहीं होना चाहिए जब तक मैं इसे स्थानीय चर के मूल्य को दोबारा आवंटित नहीं करता ... या कम से कम यह मैंने सोचा था!

क्या कोई मुझे समझा सकता है कि ऐसा क्यों हो रहा है? धन्यवाद!

यहां समस्या यह है कि जावास्क्रिप्ट संदर्भ के आस-पास ऑब्जेक्ट पास करता है।

कोड की यह रेखा

  window.g_a_PreEditData = aata;  

ऑब्जेक्ट का एक copy नहीं बनाते हैं और उसे असाइन करें। इसके बजाय एक संदर्भ निर्दिष्ट करता है।

दूसरे शब्दों में, इस कॉल के बाद, window.g_a_PreEditData और aata एक ही ऑब्जेक्ट की ओर इशारा कर रहे हैं।

यदि यह आपकी इच्छानुसार नहीं है, तो आपको ada क्लोन करना होगा। चूंकि aata एक सरणी है, आप इसे टुकड़ा विधि के माध्यम से कर सकते हैं।

  window.g_a_PreEditData = aata.slice ();  

अगर एटाटा एक ऑब्जेक्ट था तो आपको इसे किसी अन्य तरीके से क्लोन करना होगा। जावास्क्रिप्ट में वस्तुओं की क्लोनिंग के विषय पर देखें।


Comments

Popular posts from this blog

c# - Roxy file manager in MVC doesn't accept session path -

php - proc_open Too many open files in long running Symfony Console app -

c# - Show a huge number of data in DevExpress GridView -