दिलचस्प पोस्ट
एंड्रॉइड में जाले पर डेटा को हेरफेर करना लकड़हारा में कोरियोग्राफर संदेश का अर्थ AppSettings बनाम ऐप्लिकेशन सैटिंग्स के पेशेवरों और विपक्ष (.NET app.config / Web.config) एंटर-इन-हाउस ऐप वितरण जावा सॉकेट्स पर फ़ाइल (बाइट ) भेजने और प्राप्त करना एक जावास्क्रिप्ट संपत्ति के भीतर एक रेल सहायक पद्धति का उपयोग करना पूर्ण पथ को दिए जाने वाले मॉड्यूल को कैसे आयात करें? मैं MySQL तालिकाओं में GUID कैसे संग्रहीत करूँ? कैसे आईओएस सिस्टम ध्वनि को निष्क्रिय करने के लिए दो क्रमबद्ध सरणियों के संघ में सबसे छोटी तत्व कैसे मिल जाए? एमवीसी नियंत्रक को दो बार बुलाया जा रहा है कितने जीसीसी अनुकूलन स्तर हैं? सफ़ल पाठ के तहत पूर्ण जेएस स्वत: पूर्णता प्राप्त करना टी-एसक्यूएल: सभी डुप्लिकेट पंक्तियों को हटाना लेकिन एक रखते हुए तेज NSDateFormatter काम नहीं कर रहा है

जावास्क्रिप्ट में परिभाषित होने से पहले मैं फ़ंक्शन का उपयोग क्यों कर सकता / सकती हूं?

यह कोड हमेशा अलग-अलग ब्राउज़रों में भी काम करता है:

function fooCheck() { alert(internalFoo()); // we are using internalFoo() here... return internalFoo(); // and here, even though it has not been defined... function internalFoo() { return true; } //...until here! } fooCheck(); 

मुझे एक भी संदर्भ नहीं मिल सका है कि यह क्यों काम करना चाहिए, यद्यपि। मैंने पहले जॉन रेसेग की प्रस्तुति नोट में यह देखा था, लेकिन यह केवल उल्लेख किया गया था। उस बात के लिए वहां या कहीं भी कोई स्पष्टीकरण नहीं है

क्या कोई मुझे बताए?

Solutions Collecting From Web of "जावास्क्रिप्ट में परिभाषित होने से पहले मैं फ़ंक्शन का उपयोग क्यों कर सकता / सकती हूं?"

function घोषणा जादू है और इसके पहचानकर्ता को उसके कोड-ब्लॉक * में निष्पादित होने से पहले कुछ भी करने से पहले बाध्य किया जाता है।

यह function अभिव्यक्ति के साथ असाइनमेंट से भिन्न होता है, जो सामान्य शीर्ष-डाउन ऑर्डर में मूल्यांकन किया जाता है

यदि आप कहने के लिए उदाहरण बदल गए हैं:

 var internalFoo = function() { return true; }; 

यह काम करना बंद कर देगा

फ़ंक्शन की घोषणा कार्य अभिव्यक्ति से वाक्यविन्यास काफी अलग है, भले ही वे लगभग समान दिखते हैं और कुछ मामलों में अस्पष्ट हो सकते हैं।

यह ECMAScript मानक , अनुभाग 10.1.3 में प्रलेखित है। दुर्भाग्य से ईसीएमए -262 मानकों-मानकों से भी एक बहुत पठनीय दस्तावेज नहीं है!

*: युक्त फ़ंक्शन, ब्लॉक, मॉड्यूल या स्क्रिप्ट

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

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

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

जैसा कि आप जावास्क्रिप्ट से परिचित हो जाते हैं, आप उचित अनुक्रम में चीजों को लिखने की आपकी आवश्यकता के बारे में अच्छी तरह से जागरूक रहेंगे।

संशोधन: स्वीकृत उत्तर (ऊपर) की पुष्टि करने के लिए, एक वेब पेज के स्क्रिप्ट अनुभाग में कदम रखने के लिए फायरबग का उपयोग करें। आप वास्तव में किसी भी कोड को निष्पादित करने से पहले, फ़ंक्शन से फ़ंक्शन पर छोड़ देंगे, केवल पहली पंक्ति पर जाकर देखेंगे।

इसे HOISTING कहा जाता है – एक फ़ंक्शन से पहले जहां इसे परिभाषित किया गया है उसे आमंत्रित करें (कहा जाता है)।

दो अलग-अलग प्रकार के फ़ंक्शंस जिन्हें मैं लिखना चाहता हूं:

अभिव्यक्ति कार्य और समाशोधन कार्य

1- अभिव्यक्ति फ़ंक्शंस: एक फ़ंक्शन अभिव्यक्ति को एक चर में संग्रहीत किया जा सकता है ताकि उन्हें फ़ंक्शन नामों की आवश्यकता न हो। उन्हें एक अनाम फ़ंक्शन (नाम के बिना एक फ़ंक्शन) के रूप में नामित किया जाएगा। को आह्वान करने के लिए (कहा जाता है) वे हमेशा एक चर नाम का उपयोग करने की आवश्यकता होती है। अगर इस तरह के कार्यों को परिभाषित किया गया हो, तो इससे पहले कि यह हो रहा है, हमें हमेशा अभिव्यक्ति फ़ंक्शन को परिभाषित करना चाहिए और फिर उसे लागू करना चाहिए।

 let lastName = function (family) { console.log("My last name is " + family); }; let x = lastName("Lopez"); 

इस प्रकार आप ES6 में कैसे लिख सकते हैं:

lastName = (परिवार) => console.log ("मेरा आखिरी नाम है" + परिवार);

x = अंतिम नाम ("लोपेज़");

2- समाशोधन कार्य: निम्नलिखित सिंटैक्स के साथ फ़ंक्शंस घोषित किए जाते हैं, जिन्हें तत्काल निष्पादित नहीं किया जाता है। वे "बाद में उपयोग के लिए बचाए गए" हैं, और बाद में क्रियान्वित कर दिए जाएंगे, जब इन्हें आमंत्रित किया जाता है (इन्हें कहा जाता है)। इन प्रकार के फ़ंक्शंस काम करते हैं यदि आप उन्हें पहले या उसके बाद कहते हैं, जहां उन्हें परिभाषित किया गया है यदि आप एक मंदी का काम करते हैं, जहां से पहले इसे परिभाषित किया गया है – होस्टिंग – ठीक से काम करता है

 function Name(name) { console.log("My cat's name is " + name); } Name("Chloe"); 

उत्थापन उदाहरण:

 Name("Chloe"); function Name(name) { console.log("My cat's name is " + name); } 

मैंने जावास्क्रिप्ट का इस्तेमाल केवल एक छोटे से किया है मुझे यकीन नहीं है कि यह मदद करेगा, लेकिन यह आप के बारे में क्या बात कर रहे हैं इसके समान दिखता है और कुछ अंतर्दृष्टि दे सकता है:

http://www.dustindiaz.com/javascript-function-declaration-ambiguity/

कुछ भाषाओं को आवश्यकता है कि पहचानकर्ता को उपयोग करने से पहले परिभाषित करना होगा। इसका एक कारण यह है कि कंपाइलर स्रोत कोड पर एक एकल पास का उपयोग करता है।

लेकिन यदि एकाधिक पास हैं (या कुछ चेक स्थगित किए गए हैं) तो आप उस आवश्यकता के बिना पूरी तरह से रह सकते हैं इस मामले में, कोड शायद पहले पढ़ा (और व्याख्या) है और फिर लिंक सेट हो गए हैं।

फ़ंक्शन "internalFoo" के शरीर को पार्सिंग समय पर कहीं जाना चाहिए, इसलिए जब जेएस अनुवादक द्वारा कोड पढ़ा जाता है (उर्फ पार्सिंग), फ़ंक्शन के लिए डेटा संरचना बनाई जाती है और नाम को असाइन किया जाता है।

केवल बाद में, कोड चलाया जाता है, जावास्क्रिप्ट वास्तव में यह पता लगाने की कोशिश करता है कि "internalFoo" मौजूद है और यह क्या है और क्या इसे कहा जा सकता है आदि।

इसी कारण से निम्नलिखित हमेशा वैश्विक नाम स्थान में foo डालते हैं:

 if (test condition) { var foo; }