दिलचस्प पोस्ट
HTTP और HTTPS दोनों अनुरोधों के लिए पूर्ण URL और सर्लेट में क्वेरी स्ट्रिंग प्राप्त करें JSON से यूनिकोड की जगह स्ट्रिंग ऑब्जेक्ट कैसे प्राप्त करें? ग्रिडलेआउट के अंदर तत्व के एक्स और वाई सूचकांक कैसे प्राप्त करें? स्प्रिंग अनुप्रयोगान्तरण पदानुक्रम का उपयोग क्यों करें? Sass के साथ एक पुन: प्रयोज्य तरीके से इनपुट प्रकारों का एक विशिष्ट सेट स्टाइल करना जावा जेनेरिक – जेनेरिक को 2 इंटरफेस का विस्तार करने के लिए बनाएं NSZombie क्या है? एएम / पीएम मार्कर के साथ दिनांक टाइम-स्ट्रिंग पार्स करने में असमर्थ सूची फ़िल्टरिंग: सूची समझ बनाम लैम्ब्डा + फिल्टर <Div> बनाएँ और गतिशील रूप से <div> जोड़ें कैसे बाहर निकलने से पहले खत्म करने के लिए सभी बैच फ़ाइलों को इंतजार करने के लिए? वास्तविक सूची ऑब्जेक्ट में एक स्ट्रिंग का प्रतिनिधित्व करने वाली सूची को परिवर्तित करना जावास्क्रिप्ट फ़ंक्शन बनाम (फ़ंक्शन () {…} ()); MySql सर्वर स्टार्टअप त्रुटि 'सर्वर PID फ़ाइल को अपडेट किए बिना छोड़ दिया' टेक्स्टफील्ड पर टैप करने पर तिथिपिक्क प्रदर्शित करें

जावास्क्रिप्ट लूप वैरिएबल गुंजाइश

जावास्क्रिप्ट चर की स्कॉपींग के बारे में सिर्फ एक त्वरित सवाल

alert() फ़ंक्शन को क्यों नहीं लौटाता i के मूल्य को undefined लौटाता है?

 $(document).ready(function () { for(var i = 0; i < 10; i += 1){ } alert("What is 'i'? " + i); }); 

मैं जेएस के लिए काफी नया हूँ, और लगभग सभी अन्य भाषाओं में मुझे डब दिया गया है, लूप के दायरे में एक घोषणा में उस लूप के मान शामिल होंगे, लेकिन इस मामले में क्यों नहीं?

यानी What is 'i'? 10' What is 'i'? 10' मुद्रित किया गया है

Solutions Collecting From Web of "जावास्क्रिप्ट लूप वैरिएबल गुंजाइश"

For -loop के " प्रारंभिक पैरामीटर " के लिए MDN देखें:

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

जावास्क्रिप्ट में ब्लॉक स्कोप नहीं है, बस गुंजाइश समारोह। चूंकि i का आरंभीकरण एक फ़ंक्शन के भीतर है, उस वैरिएबल एक ही फ़ंक्शन में कहीं भी पहुंच योग्य है।

एमडीएन से :

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

जावास्क्रिप्ट लोग इसे ठीक करने की कोशिश कर रहे हैं!

EcmaScript6 (उर्फ इक्मास्क्रिप्ट 2015) जावास्क्रिप्ट का नवीनतम संस्करण है जिसे पिछली गर्मियों में पारित किया गया था और ब्राउज़र केवल इसकी विशेषताओं का समर्थन करना शुरू कर रहे हैं

उन विशेषताओं में से एक ब्लॉक-स्कोप स्थानीय चर "अभिव्यक्ति" के साथ है। अभी (अप्रैल 2016) के अनुसार, प्रमुख ब्राउज़रों के वर्तमान संस्करण सफारी को छोड़कर इसका समर्थन करते हैं। कुछ मोबाइल ब्राउज़र इसका समर्थन करते हैं

आप यहां इसके बारे में अधिक पढ़ सकते हैं (विशेष रूप से, "छोरों के लिए चलो स्किड चर" अनुभाग देखें): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

आप वर्तमान ब्राउज़र समर्थन की जांच कर सकते हैं (पंक्ति बाइंडिंग -> चलिए देखें): https://kangax.github.io/compat-table/es6/

अन्य भाषाओं (उदाहरण के लिए: जावा, सी ++, सी) के विपरीत, जावास्क्रिप्ट ब्लॉक स्कोप का समर्थन नहीं करता है। एक बार जब आप एक लूप या किसी फ़ंक्शन में एक वेरिएबल घोषित करते हैं, तो यह आपके दायरे से फ़ंक्शन बॉडी के भीतर है I

 for(i=0; i<arr.length; i++) { var j=0; // ... } 

यहाँ आपके i एक वैश्विक वैरिएबल बन जाता i और j में फ़ंक्शन या स्क्रिप्ट के लिए स्थानीय बन जाते हैं जिसमें लूप होता है।

 for(i=0; i<arr.length; i++) { var j=0; // ... } 

यह कहना सही नहीं है कि उपर्युक्त एक वैश्विक चर i बनाता है i मेरा मानना ​​है कि आपको var घोषित करने के लिए हमेशा var का उपयोग करना चाहिए (जब तक कि आप जानबूझकर 'वैरिएबल' की बजाय एक 'प्रॉपर्टी' चाहते हैं -किसी जे एस कोडिंग परिदृश्यों की 99.99% में अपेक्षाकृत कम संभावना नहीं है …)

जब i एक प्रारंभिक मान निर्दिष्ट कर रहा i तो स्थानीय या यहां तक ​​कि वैश्विक वैरिएबल भी नहीं बना रहा है, यह वैश्विक वस्तु के लिए एक प्रॉपर्टी i बना रहा है (जो कि ज्यादातर वैश्विक वैरिएबल की तरह दिखती है – लेकिन उनके पास कुछ सूक्ष्म अंतर है) ।

बेहतर होगा:

 var i; for(i=0; i<arr.length; i++) { var j=0; // ... } 

अब लूप एक वैश्विक चर i का उपयोग कर रहा है (या फ़ंक्शन स्थानीय वैरिएबल i , यदि यह कोड फ़ंक्शन में दिखाई देता है)

इस बारे में अधिक जानकारी के लिए जो कि वर्ड की ओर से काम करता है और जावास्क्रिप्ट में चर बनाम गुण है

– ध्यान दें, थोड़ा भ्रामक क्या होता है कि आप एक वैरिएबल को पुनः घोषित कर सकते हैं, उदाहरण के लिए दूसरे लूप में

 for(var i=0; i<9; i++){ document.write('i = ' + i + '<br>'); } for(var i=0; i<9; i++){ document.write('i = ' + i + '<br>'); } 

यह वैध लगता है (कोई त्रुटि जब मैं परीक्षण करता हूं)। ऐसा लगता है कि आप JavaScript में चर को फिर से घोषित कर सकते हैं – लेकिन यह संभवतः हर एक अच्छा विचार नहीं है, जब तक कि कोई खास मामला न हो – इस संबंधित प्रश्न का उल्लेख करते हुए देखें [कैसे Google Analytics एक चर के 'सुरक्षित' पुनर्वितरण का उपयोग करता है] ( एक जावास्क्रिप्ट चर का पुनर्लेखन )

जेएस में फिर से घोषित चर के बारे में कुछ चर्चा है (और i भी जैसे लूप वैरिएबल) इस संबंधित SO प्रश्न में: पाश के अंदर या बाहर चर को घोषित करना

चर के एकल घोषणा के लिए जावास्क्रिप्ट पैटर्न का आयोजन किया गया है