2011-10-27 8 views
6

jQuery स्रोत, एक बंद में लपेटा जाता है इस तरह:jQuery स्रोत में इन दो पैरामीटर क्यों हैं?

(function(window, undefined) { 
    //awesome jQuery library code in here 
})(window); 

मुझे समझ नहीं आता क्यों इन मानकों में से किसी की जरूरत है।

window एक वैश्विक चर है, इसलिए इसे पारित करने की आवश्यकता क्यों है? वैश्विक पैरामीटर में गुजरने और उसी नाम से बंद होने के अंदर इसका उपयोग करने का क्या उद्देश्य है?

undefined पैरामीटर क्या है? इसका कोई मूल्य क्यों नहीं पारित किया जाता है?

+0

विंडो इस दायरे में स्थानीय के रूप में उपयोग की जाएगी, जिससे मुझे तेजी से पहुंच मिलती है, मुझे लगता है। – Ibu

उत्तर

11

मैं बहुत यकीन है कि यह पहले से ही उत्तर दिया गया है हूँ, लेकिन:

  • window में उत्तीर्ण कर लेना) कोड संपीड़न नाम (यानी गुमनाम भीतर एक भी अक्षर चर नाम और इसकी जगह Munge लिए अनुमति देता है फ़ंक्शन) और बी) यह सुनिश्चित करता है कि लाइब्रेरी परिभाषित होने पर वैरिएबल विंडो ऑब्जेक्ट को संदर्भित करता है, बस अगर किसी को jQuery लोड होने के बाद वैश्विक दायरे में window को फिर से परिभाषित करता है।

  • एक तर्क के रूप undefined (लेकिन एक मूल्य में गुजर नहीं) सहित

    चर munging की इजाजत दी और समस्याओं से बचने यदि undefined चर नए सिरे से परिभाषित किया जाता है, undefined के लिए एक ही बात करता है (हाँ, जावास्क्रिप्ट इस अनुमति देता है)।

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

+0

पूरी तरह से समझ में आता है, +1 – Ibu

+0

यदि वैश्विक दायरे में 'विंडो' को फिर से परिभाषित किया गया था, तो क्या आप इसे पास करते समय फिर से परिभाषित नहीं करेंगे? –

+2

@ पीटर ऑलसन - अगर इसे बाद में फिर से परिभाषित नहीं किया गया है - यह jQuery लाइब्रेरी लोड होने पर 'विंडो' संदर्भ को ठीक करता है, इसलिए बाद में 'विंडो' शेन्नीगन्स का कोई प्रभाव नहीं पड़ेगा। मुझे लगता है कि यदि आप लाइब्रेरी लोड से पहले विंडो को फिर से परिभाषित करते हैं, तो यह टूट जाएगा, लेकिन फिर आप जो प्राप्त करते हैं उसके लायक हैं :)। – nrabinowitz

संबंधित मुद्दे