दिलचस्प पोस्ट
जावा के साथ एक प्लगइन सिस्टम बनाने का सर्वोत्तम तरीका मैं अपने लेबल के रूप में उसी पंक्ति पर इनपुट तत्व कैसे डाल सकता / सकती हूं? विंडोज 7 पर GetWindowRight बहुत छोटी है कैसे स्क्रॉल करने योग्य डिब्बे के भीतर निश्चित हैडर तालिका बनाने के लिए? किसी अन्य स्क्रिप्ट से चर / फ़ंक्शन एक्सेस करें सरणी से निकटतम मान सरणी से यादृच्छिक वस्तु प्राप्त करें javac को आंतरिक या बाह्य कमांड, ऑपरेटिव प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं है __doPostBack का उपयोग कैसे करें () जावा से बाह्य कार्यक्रम चलाएं, आउटपुट पढ़ें, रुकावट की अनुमति दें मॉनिटर चालू / बंद करें एक्सएमएल में बाह्य संदर्भित डीटीडी 2.0 में डाउनलोड प्रगति कैसे प्राप्त करें? स्प्रिंग सुरक्षा के साथ जावा कोड में "हैरोल" कैसे जांचें? ग्रैडल (एंड्रॉइड स्टूडियो) के साथ बेहद लंबा निर्माण

जावास्क्रिप्ट गुंजाइश और बंद

मैं अपने सिर को क्लोजर के आसपास लपेटने की कोशिश कर रहा हूं (वहां एक मजाक है) और मैं इस पर भाग गया:

(function () { /* do cool stuff */ })(); 

यह कैसे काम करता है? पेरोन में समारोह डालने का क्या उद्देश्य है? खाली पैरों को बाद में क्यों?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट गुंजाइश और बंद"

इसका मतलब यह है कि मस्त चीजों में घोषित कोई भी वैरिएबल वैश्विक नामस्थान में नहीं बनाया जाएगा। जावास्क्रिप्ट में कोई भी फ़ंक्शन इस तरह के अवसर पैदा करेगा। मान लें कि आपके पास कुछ जावास्क्रिप्ट है जिसे आप चलाना चाहते हैं अगर तुम यह करते हो:

 var b = 1; // stuff using b 

और कुछ अन्य कोड बी का उपयोग करता है, इसे आपके बाएं ओवर वैल्यू मिलेगा। (या, इससे भी बदतर, यदि आपके कोड रन होने से पहले कोई अन्य कोड ख सेट करता है, तो बाद में उसके पुराने मूल्य प्राप्त करने की कोशिश करता है, तो आप उस समय में इसे बदल दिया होगा।)

दूसरी ओर, यदि आपके पास यह कोड है, जो घोषित करता है और फिर एक फ़ंक्शन कॉल करता है:

 function a() { var b = 1; } a(); 

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

दुर्भाग्यवश, आप अभी नहीं कह सकते हैं:

 function() { ... }() 

क्योंकि यह एक फ़ंक्शन घोषणा बयान के रूप में पार्स किया जाएगा, और फिर एक वाक्यविन्यास त्रुटि। कोष्ठक में फ़ंक्शन घोषणा लपेटकर, आपको एक फ़ंक्शन अभिव्यक्ति प्राप्त होती है, जिसे तब कहा जा सकता है आप इसे दूसरे फ़ंक्शन अभिव्यक्ति (जैसे एक, ऊपर) की तरह कहते हैं, पैरों के दूसरे सेट का उपयोग करते हुए। उदाहरण के लिए, यदि फ़ंक्शन तर्क लेता है, तो आप उन्हें वहां पास करेंगे:

 (function(a) { ... })(1) 

यह एक फ़ंक्शन बनाता है, इसे कॉल करता है, और उसे हटा देता है।

अगर आप इसे इस तरह दिखते हैं तो यह स्पष्ट हो सकता है:

 var throwaway = function(){ // do cool stuff }; throwaway(); 

यह एक निजी नामस्थान बनाने के लिए किया जाता है फ़ंक्शन में कोड के पृष्ठ पर लोड किए गए अन्य कोड के साथ परस्पर विरोधी के बारे में चिंता किए बिना फ़ंक्शंस और वेरिएबल हो सकते हैं।

मैं हाल ही में इस पोस्ट में आया था। इस प्रकार की फ़ंक्शन परिभाषा और कॉल को स्व-इनव्यूकिंग कार्य कहा जाता है

 (function(){ //code })(); 

फ़ंक्शन के अंदर स्थित कोड को इसकी परिभाषा के तुरंत बाद निष्पादित किया जाएगा

समारोह के चारों ओर के पैरों को यह स्पष्ट करता है कि फ़ंक्शन एक अभिव्यक्ति है। समारोह के बाद कॉल करने वाले पैरों के बाद

ध्यान दें कि फ़ंक्शन में कोई नाम नहीं है।

एक क्लोजर दृष्टिकोण फ़ंक्शन को वेरिएबल्स पास करना है:

 (function($, var_1, var_2) { // use JQuery, var_1 and var_2 as local variables })($, var_1, var_2); 

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

पैरों के अंदर फ़ंक्शन घोषणा को लगाते हुए एक अभिव्यक्ति बनाता है जो कि भीतर के अनाम फ़ंक्शन का मूल्यांकन करता है। इसलिए, पहला पैराैथेटिकल एक फ़ंक्शन के मूल्यांकन करता है।

अंत में "रिक्त पैरेन्स" परिभाषित फ़ंक्शन का आह्वान करते हैं, इसलिए "// कूल स्टफ" तुरंत निष्पादित होती है

यह एक-एक-एक-तर-से-मक्खी कोड को निष्पादित करने का एक तरीका है, जबकि वैश्विक दायरे से भी चर रखते हुए।

यहाँ क्या सचित्र है, हालांकि, बंद करने के साथ कुछ नहीं करना है – कम से कम सीधे नहीं। एक पैरेंट फ़ंक्शन पहले ही बाहर निकल जाने के बाद क्लोज़र्स एक लेक्सिकल गुंजाइश बनाए रखने के बारे में हैं।