दिलचस्प पोस्ट
JQuery का उपयोग कर HTML तत्व बनाने का सबसे कारगर तरीका क्या है? क्यों सभी ब्राउज़रों के उपयोगकर्ता एजेंट "मोज़िला /" से शुरू करते हैं? जावा में एक यूआरएल या यूआरआर बनाने के लिए मुहावरेदार तरीका क्या है? पर्ल में डबल एरो (=>) ऑपरेटर कैसे काम करता है? जावा स्विंग JTextField सेट प्लेसहोल्डर SQL सर्वर 2008 पर बल्क डिलीटे (क्या डेटा हटाना के लिए बल्क कॉपी (बीसीपी) जैसी कोई चीज़ है?) पुरानी सीएसवी फ़ाइल अजगर के लिए नई पंक्ति जोड़ें एचटीटीपीएसर्वेटरेक्स्ट से जेएसओएन ऑब्जेक्ट को प्राप्त करना मैं जार के अंदर एक कॉन्फ़िग फाइल कैसे प्राप्त करूं? इसे पुन: उपयोग करने के लिए कैश में डाटालेट को कैसे स्टोर करना है? एक समय श्रृंखला में हाल के परिवर्तनों को प्रदर्शित करने के लिए JFreeChart का उपयोग करना ExecJS :: उपयोगकर्ता में रनटाइम त्रुटि # इंडेक्स (आरओआर) JQuery का उपयोग करके लंगर कैसे प्राप्त करें? आईओएस 9 यूआरएल SCHEME के ​​साथ Instagram ऐप खोलने नहीं डाटाबेस स्कीमा जो विशेष गुणों का समर्थन कर सकती है

जावास्क्रिप्ट में स्कोप चेन

मैंने जावास्क्रिप्ट में दायरे की श्रृंखला को पढ़ा है लेकिन यह मेरे लिए कोई मायने नहीं रखता है, क्या कोई मुझे बता सकता है कि क्या गुंजाइश है और यह कैसे ग्राफिक या कुछ चीज़ों के साथ काम करता है जो एक बेवकूफ भी समझ सकता है। मैं इसे चला गया लेकिन मुझे कुछ समझ में नहीं आया 🙁

अग्रिम में धन्यवाद।

Solutions Collecting From Web of "जावास्क्रिप्ट में स्कोप चेन"

दायरे श्रृंखला को समझने के लिए आपको पता होना चाहिए कि क्लोजर कैसे काम करते हैं

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

जावास्क्रिप्ट एक विशेष संदर्भ में पहचानकर्ता को दायरे से आगे बढ़कर समेकित करता है, स्थानीय रूप से वैश्विक रूप से आगे बढ़ रहा है

तीन नेस्टेड फ़ंक्शंस के साथ इस उदाहरण पर विचार करें:

var currentScope = 0; // global scope (function () { var currentScope = 1, one = 'scope1'; alert(currentScope); (function () { var currentScope = 2, two = 'scope2'; alert(currentScope); (function () { var currentScope = 3, three = 'scope3'; alert(currentScope); alert(one + two + three); // climb up the scope chain to get one and two }()); }()); }()); 

अनुशंसित पढ़ता है:

  • जावास्क्रिप्ट क्लोज़र्स
  • बंद

ECMAScript (मुख्य भाषा जो कि जेएस पर आधारित है) में कोई भी कार्य एक अलग निष्पादन संदर्भ है, और एक-दूसरे से अलग-अलग चलाता है। प्रत्येक निष्पादन संदर्भ के अंदर, this प्रश्न में ऑब्जेक्ट को संदर्भित करता है, फ़ंक्शन को जो भी जुड़ा हुआ है उसे डिफ़ॉल्ट करता है।

 function foo() { alert(this===window) } 

सच सचेत होंगे, क्योंकि विंडो वस्तु है जो 'फू' विधि का मालिक है फ़ंक्शन में परिभाषित किसी भी चर को उस फ़ंक्शन की अनूठी गुंजाइश श्रृंखला, पर्यावरण के माध्यम से एक्सेस किया जाता है।

 function world() { var name = 'global'; alert(name) } 

जाहिर है कि 'वैश्विक' चेतावनी होगी

 function world() { var name = 'global'; (function() { var name = 'country'; alert(name) })(); alert(name) } 

नवीनतम उदाहरण में, जब पहली चेतावनी को लागू किया जाता है, तो जावास्क्रिप्ट यह निर्धारित करता है कि पहचानकर्ता name को परिभाषित किया गया आंतरिक फ़ंक्शन के दायरे श्रृंखला में है, इसलिए इसे पकड़ने के लिए दायरे श्रृंखला को देखने की आवश्यकता नहीं है।

दूसरे चेतावनी आवेश में, name को उसी संदर्भ में भी परिभाषित किया गया है और अलर्ट 'वैश्विक';

 function world() { var name = 'global'; (function() { alert(name) })(); } 

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

संदर्भ:

यह बंद होने के बारे में है आप आंतरिक गुंजाइश में दायरे से बाहरी चर का उपयोग कर सकते हैं:

 function get_inner_scope () { var outer = 'Outer variable value'; return function () { alert(outer); } } f = get_inner_scope(); f(); // alerts Outer variable value 

पहले Google के लिंक द्वारा अन्य नमूनों के साथ अधिक दी गई जानकारी: http://blogs.msdn.com/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यह अभी भी डेवलपर्स के लिए उपयोगी है मैं इसे थोड़ा अलग तरीके से करना चाहता था क्योंकि यह शुरुआती लोगों के लिए स्कोप श्रृंखला को समझने के लिए अधिक अनुकूल होगा। यहां कोड का मेरा संशोधित संस्करण है:

 var currentScope = 0; // global scope function a () { var currentScope = 1, one = 'scope1'; alert(currentScope); function b () { var currentScope = 2, two = 'scope2'; alert(currentScope); function c () { var currentScope = 3, three = 'scope3'; alert(currentScope); alert(one + two + three); // climb up the scope chain to get one and two } c(); } b(); } a(); 

जावास्क्रिप्ट में स्कोप श्रृंखला में सामान्य शब्दों में समझाया गया

एलेक्स एक खुशहाल आदमी है, एक अच्छा दिन, हाथ में अपनी मासिक वेतन के साथ सड़क के नीचे चलना हो जाता है।

बाद में उन्हें पता चलता है कि कल उनकी बेटियों के लिए 1000 डॉलर का शिक्षण देने का अंतिम दिन कल है।
वह घर चलाता है, 400 डॉलर की बचत करता है, बाकी के बारे में चिंतित है (600 डॉलर)। तत्काल विचार है कि उसके पिता मैथ्यू से कुछ उधार लेना है
मैथ्यू, गरीब बढ़ई, किसी भी पैसे से बचे हुए अपने विरासत के कंगन को 300 डॉलर में बेचता है और उसे अपने बेटे एलेक्स को उधार देता है।
एलेक्स की समाज में अच्छी प्रतिष्ठा है, उसे तुरंत स्थानीय बैंक से $ 300 मिल जाता है और समय पर अपनी बेटी की पढ़ाई का भुगतान करता है।

जावास्क्रिप्ट में स्कोप श्रृंखला में वापस आ रहा है:
जावास्क्रिप्ट में एलेक्स-ए फंक्शन
मैथ्यू- तत्काल कार्य, एलेक्स में नेस्टेड है
मैथ्यूज मैथ्यूज- तत्काल कार्य मैथ्यू में नेस्टेड है
बैंक-ग्लोबल वैरिएबल

 function Bank() { loan=300; Mathew(); function Mathew() { mathew=300; Alex(); function Alex() { savings:400; alert('I need some money'); } } } Bank(); 

इस बिंदु पर एलेक्स के क्षेत्र श्रृंखला दिखता है: [बचत: 400] + [गणित: 300] + [ऋण: 300];