दिलचस्प पोस्ट
एन.टी. प्रधान संख्या की गणना और छपाई एक नया TextView प्रोग्राम बनाएं तो इसे एक और TextView के नीचे प्रदर्शित करें साझा ऑब्जेक्ट बनाने की कोशिश में मुझे एक जीसीसी "अपरिभाषित संदर्भ" त्रुटि क्यों मिली? JavaScriptSerializer। डायरेरिअलाइज़ – फ़ील्ड नाम बदलने के लिए क्वेरी स्ट्रिंग में उपयोग के लिए ASP.Net URLEncode एम्पर्सस एक प्रॉक्सी के पीछे file_get_contents? अनाम वर्ग की एक सामान्य सूची कैसे प्रयोक्ता परिभाषित तालिका प्रकार के रूप में संग्रहीत सी # में प्रक्रियाकृत पैरामीटर पारित करने के लिए जावा में एक अंश का प्रतिनिधित्व करने का सबसे अच्छा तरीका है? बाकी बनाम JSON-RPC? CHAR_BIT क्या है? इनलाइन चर कैसे काम करते हैं? नोवासडेफफ़ाउंड त्रुटि हो रही है जब आम जावा में इस्तेमाल होता है। String.StringUtils को एंड्रॉइड जावा कोड में? HTTP शीर्षलेख IIS7.5 भेजे जाने के बाद सर्वर स्थिति सेट नहीं कर सकता बेस 64 को डीकोड करने के लिए जावास्क्रिप्ट एटोब का इस्तेमाल करना यूटीएफ -8 तारों को ठीक से व्याख्या नहीं करता है

क्या लाभ (फ़ंक्शन (विंडो, दस्तावेज़, अपरिभाषित) {…}) (विंडो, दस्तावेज़) का उपयोग करता है?

मुझे लगता है कि इस पद्धति का उपयोग करने के लिए नई गर्मता है, लेकिन मुझे नहीं पता कि इसका फायदा क्या है और मैं कड़ी निन्दाओं को समझ नहीं पाया।

पैटर्न:

(function(window, document, undefined){ window.MyObject = { methodA: function() { ... }, methodB: function() { ... } }; })(window, document) 

इसलिए मुझे इसके बारे में कई सवाल हैं।

क्या इस तरह से एक वस्तु को कैंप करने के लिए कोई खास फायदा है?
बस सामान्य रूप से उपयोग किए जाने के बजाय खिड़की और दस्तावेज़ क्यों तंग आये हैं?
क्यों हेक undefined रहा है?
वस्तु को संलग्न कर रहा है जो हम सीधे विंडो में एक विशेष रूप से अच्छा विचार बना रहे हैं?

मैं जावास्क्रिप्ट एनकॉप्शन के क्रॉकफोर्ड शैली को कॉल करने के लिए उपयोग कर रहा हूं (क्योंकि मुझे इसे डगलस क्रॉकफोर्ड जावास्क्रिप्ट वीडियो से मिला है)।

 NameSpace.MyObject = function() { // Private methods // These methods are available in the closure // but are not exposed outside the object we'll be returning. var methodA = function() { ... }; // Public methods // We return an object that uses our private functions, // but only exposes the interface we want to be available. return { methodB: function() { var a = methodA(); }, methodC: function() { ... } } // Note that we're executing the function here. }(); 

क्या इन पद्धतियों में से एक दूसरे से बेहतर ढंग से बेहतर है? क्या पहले एक दूसरे का विकास है?

वेब के समाधान से एकत्रित समाधान "क्या लाभ (फ़ंक्शन (विंडो, दस्तावेज़, अपरिभाषित) {…}) (विंडो, दस्तावेज़) का उपयोग करता है?"

बस सामान्य रूप से उपयोग किए जाने के बजाय खिड़की और दस्तावेज़ क्यों तंग आये हैं?

आम तौर पर पहचानकर्ता संकल्प प्रक्रिया को जकड़ना, उन्हें स्थानीय चर के रूप में रखने में मदद मिल सकती है (हालांकि आईएमओ प्रदर्शन सुधार नगण्य हो सकता है)।

वैश्विक ऑब्जेक्ट पास करना गैर-ब्राउज़र परिवेशों पर व्यापक रूप से इस्तेमाल की जाने वाली तकनीक है, जहां आपके पास वैश्विक क्षेत्र में एक window पहचानकर्ता नहीं है, उदाहरण के लिए:

 (function (global) { //.. })(this); // this on the global execution context is // the global object itself 

क्यों हेक अपरिवर्तित हो रहा है?

ऐसा इसलिए किया जाता है क्योंकि ECMAScript 3 में undefined वैश्विक संपत्ति, अस्थिर है, जिसका अर्थ है कि कोई व्यक्ति आपका कोड को प्रभावित कर सकता है, उदाहरण के लिए:

 undefined = true; // mutable (function (undefined) { alert(typeof undefined); // "undefined", the local identifier })(); // <-- no value passed, undefined by default 

यदि आप सावधानीपूर्वक undefined देख रहे हैं तो वास्तव में पारित नहीं किया जा रहा है (फंक्शन कॉल पर कोई तर्क नहीं है), वह संपत्ति window.undefined का उपयोग किए बिना undefined मान प्राप्त करने के लिए एक विश्वसनीय तरीके है।

जावास्क्रिप्ट में undefined नाम का मतलब कुछ खास नहीं है, यह true , false , आदि जैसे कीवर्ड नहीं है …, यह सिर्फ एक पहचानकर्ता है।

सिर्फ रिकॉर्ड के लिए, ईसीएमएस्क्रिप्ट 5 में, इस संपत्ति को गैर-लिखने योग्य बनाया गया था …

वस्तु को संलग्न कर रहा है जो हम सीधे विंडो में एक विशेष रूप से अच्छा विचार बना रहे हैं?

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

यह विशेष शैली "क्रॉकफोर्ड" शैली पर कुछ लाभ लाती है। मुख्यतः, window गुजरना और document स्क्रिप्ट को और अधिक कुशलतापूर्वक कम कर देता है। एक मिनेफ़ायर उन पैरामीटरों को एकल-वर्ण के नामों के नाम से बदल सकता है, क्रमशः प्रति संदर्भ 5 और 7 बाइट्स को बचा सकता है। यह जोड़ सकते हैं: jQuery संदर्भ window 33 बार और document 91 बार। प्रत्येक टोकन को एक वर्ण में कम करना 802 बाइट्स बचाता है।

इसके अतिरिक्त, आप निष्पादन की गति लाभ प्राप्त करते हैं। जब मैंने पहली बार जोहोरेल के दावे को पढ़ते हुए कहा कि यह एक निष्पादन लाभ प्रदान करता है, तो मैंने सोचा, "यह व्यर्थ ही लगता है।" इसलिए मैंने एक परीक्षण पृष्ठ के साथ वास्तविक प्रदर्शन को प्रमाणित किया। window एक सौ मिलियन बार रेफ्रेंसिंग करते हुए, स्थानीय चर संदर्भ फ़ायरफ़ॉक्स 3.6 में मामूली 20% की गति में वृद्धि (4200 एमएस से 3400 एमएस) और क्रोम 9 में चौंकाने वाले 31,000% वृद्धि (13 सेकंड से 400 एमएमएस) प्रदान करता है।

बेशक, आप कभी भी संदर्भ window 100,000,000 बार व्यवहार करते हैं, और यहां तक ​​कि 10,000 प्रत्यक्ष संदर्भ केवल क्रोम में 1 एमएमएस लेते हैं, इसलिए वास्तविक प्रदर्शन लाभ लगभग पूरी तरह से नगण्य है।

क्यों हेक undefined रहा है?

क्योंकि (जैसा कि @ सीएमएस द्वारा वर्णित है) टोकन undefined वास्तव में अपरिभाषित है । null विपरीत, इसका कोई विशेष अर्थ नहीं है, और आप इस पहचानकर्ता को किसी भी अन्य चर नाम की तरह निर्दिष्ट करने के लिए स्वतंत्र हैं। (ध्यान दें, हालांकि, यह अब ईसीएमएस्क्रिप्ट 5 में सच नहीं है ।)

वस्तु को संलग्न कर रहा है जो हम सीधे खिड़की पर एक विशेष रूप से अच्छा विचार कर रहे हैं?

window ऑब्जेक्ट वैश्विक दायरा है, इसलिए ठीक है कि आप किसी बिंदु पर क्या कर रहे हैं, चाहे आप स्पष्ट रूप से "विंडो" लिखते हैं या नहीं। window.Namespace = {}; और Namespace = {}; बराबर हैं

मैं क्रॉकफोर्ड की शैली का उपयोग करने में आपके साथ हूं

अपने प्रश्नों का उत्तर देने के लिए

1.क्या इस तरह से किसी वस्तु को कैंप करने के लिए कोई खास फायदा है?

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

2. क्यों खिड़की और दस्तावेज सिर्फ सामान्य रूप से पहुँचा जा रहा है बजाय खिलाया जा रहा है?

ऊपर बताया स्थानीय चर तेजी से होते हैं, लेकिन इन दिनों संकलित जिट के साथ नाममात्र बनते हैं

3. क्यों बिल्ली में पारित होने के अपरिभाषित है?

कोई सुराग नहीं….

4. क्या हम उस ऑब्जेक्ट को संलग्न कर रहे हैं जो हम सीधे विंडो में एक विशेष रूप से अच्छा विचार बना रहे हैं?

शायद नहीं, लेकिन मैं अभी भी क्रॉकफोर्ड के पैटर्न से चिपक करूँगा क्योंकि खिड़की ऑब्जेक्ट के फ़ंक्शन को संलग्न करने से इसे अन्य गैर-मानक नामस्थान के माध्यम से उजागर करने के विरोध के रूप में खिड़की ऑब्जेक्ट के माध्यम से अन्य वैश्विक स्टैक को प्रदर्शित करता है।

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

एक अपरिभाषित तर्क लेना इस तथ्य के खिलाफ की रक्षा करने का प्रयास कर रहा है कि अपरिभाषित किया जा सकता है:

 undefined = 3; alert(undefined); 

इस बारे में सीएमएस का जवाब देखें कि यह सुरक्षा कैसे सुधारता है