पहले एक है, वास्तव में, एक आशुलिपि के रूप में $
वैश्विक चर ले जाता है $(document).ready()
के लिए, here पर ध्यान दें।
लेकिन दूसरा एक तत्काल-आमंत्रण समारोह अभिव्यक्ति (आईआईएफई), घोषित एक अज्ञात फ़ंक्शन जिसे तुरंत घोषित किया जाता है और तुरंत बुलाया जाता है।
वास्तव में, सही सिंटैक्स (तर्क अपने उदाहरण में याद आ रही है) है:
(function($) {
//my $ object is local now
})(jQuery);
इस मामले में, आप एक तर्क के साथ अनाम समारोह कॉल कर रहे हैं।
इस पैटर्न (Iife) का मुख्य लाभ यह है: अपने कोड को अलग (के रूप में आप जितने चाहें उतने वैरिएबल बना सकते हैं और यह, गुंजाइश आपकी अनाम कार्य करने के लिए सीमित हो जाएगी जब तक आप कुछ वापसी)। इस पैटर्न का उपयोग "निजी" और "सार्वजनिक" विधियों को परिभाषित करने के लिए बहुत कुछ किया जाता है। इस तरह:
var myModule = (function() {
function privateFunction() { console.log("I can't be accessed from outside :("; }
var privateVar = "me too :(";
function publicFunction() { console.log("Hey! I'm here!"; }
/* expose what you want */
return {
publicFunction: publicFunction
}
})();
myModule.publicFunction(); //Hey! I'm here!
myModule.privateFunction(); //undefined;
आप भी इसे मॉड्यूल पैटर्न कॉल कर सकते हैं।
अपने दूसरे उदाहरण में, आप हाल ही में बनाए गए अज्ञात फ़ंक्शन को तर्क के साथ बुला रहे हैं, और आपका अनाम फ़ंक्शन उस तर्क को प्राप्त करता है। यह निर्भरता इंजेक्शन का एक तरीका है।
इस तरह, आप अपने ग्लोबल वैरिएबल को फ़ंक्शन के अंदर स्थानीय रूप में कुशल बनाते हैं। ध्यान दें कि पहले उदाहरण में, हम jQuery
ऑब्जेक्ट पास कर रहे हैं और इसे अपने फ़ंक्शन के अंदर $
के रूप में जोड़ रहे हैं। किसी के लिए jQuery ऑब्जेक्ट को ओवरराइड करना अधिक कठिन होता है, लेकिन, कुछ स्क्रिप्ट वैश्विक डॉलर प्रतीक को फिर से असाइन कर सकती है, खासकर यदि आपके पास अपने ऐप का पूर्ण नियंत्रण नहीं है।इस तरह, आप हमेशा jQuery
ऑब्जेक्ट को पास कर रहे हैं और इसे $
के रूप में जोड़ रहे हैं।
अंत में, मुझे एक Iife लिए पैरामीटर प्रदान करने के कुछ अन्य लाभ को सूचीबद्ध करते here से पकड़ा:
यह तेजी से है: जावास्क्रिप्ट पहले स्थानीय गुंजाइश में देखने ( से पहले चढ़ाई)। यह थोड़ा सा प्रदर्शन में सुधार कर सकता है।
minification मदद करता है: minifier अब, एक एक अक्षर शब्द करने के लिए अपने दायरे के अंदर चर नाम बदल सकते हैं कोड आकार को कम करने।
एक तरफ ध्यान दें के रूप में, मैं करने के लिए (दृढ़ता से) करते हैं का उपयोग करना पसंद 'jQuery (फ़ंक्शन ($) {//...$ यहां jQuery होने की गारंटी है});' - "नो-टकराव-सुरक्षित" दस्तावेज़ तैयार है। –
'(फ़ंक्शन() {console.log (" तैयार! ");}) ($) 'पैरामीटर $ लेता है लेकिन इसके साथ कुछ भी नहीं करता है। –
दूसरे मामले में आप अज्ञात फ़ंक्शन में jquery उदाहरण पास कर रहे हैं (कोई विचार नहीं है)। यह immeidiately निष्पादित किया जाएगा। – degr