2009-07-31 13 views
8

मेरी क्वेरी का उपयोग उन मामलों में किया जाता है जो "(function() {...})();" यह देखते हुए कि मैं एक प्लगइन नहीं हूँ। उदाहरण के लिए "http://piecesofrakesh.blogspot.com/2009/03/downloading-javascript-files-in.html"मुझे वाक्यविन्यास का उपयोग कब करना चाहिए "(function() {...})();"?

(function() {   
    var s = [ 
    "/javascripts/script1.js", 
    "/javascripts/script2.js" 
    ]; 

    var sc = "script", tp = "text/javascript", sa = "setAttribute", doc = document, ua = window.navigator.userAgent; 

    for(var i=0, l=s.length; i<l; ++i) { 
    if(ua.indexOf("MSIE")!==-1 || ua.indexOf("WebKit")!==-1) { 
     doc.writeln("<" + sc + " type=\"" + tp + "\" src=\"" + s[i] + 
      "\" defer></" + sc + ">"); 
    } else { 
     var t=doc.createElement(sc); 
     t[sa]("src", s[i]); 
     t[sa]("type", tp); 
     doc.getElementsByTagName("head")[0].appendChild(t); 
    } 
    } 
})(); 

या

var s = [ 
    "/javascripts/script1.js", 
    "/javascripts/script2.js" 
]; 
... 

धन्यवाद।

+9

वास्तव में सवाल क्या है? – Scoregraphic

+8

"यह देखते हुए कि मैं प्लगइन नहीं हूं" प्यारा है :-) – balpha

+0

क्षमा करें, मैं अंग्रेजी में बहुत बुरा लिखता हूं। स्क्रिप्ट एक प्लगइन नहीं है, इस मामले में यह इस संरचना का उपयोग करने के लिए उपयोगी है "(function() {...}();" –

उत्तर

24

यह संघर्ष नामकरण से बचने के लिए किया जाता है।

जब आप कोई फ़ंक्शन घोषित करते हैं, तो उस फ़ंक्शन में चर के लिए अपना नामस्थान होता है। उस फ़ंक्शन में कोड को लपेटकर जिसे तत्काल बुलाया जाता है, आप अपने चर के साथ वैश्विक चर को ओवरराइट करने से बचते हैं।

इस मामले में s और sc एक मूल्य असाइन किया गया है। यदि आपने वैश्विक दायरे में ऐसा किया है और अन्य स्क्रिप्ट पहले से ही उन नामों के साथ चर के उपयोग कर रहे हैं, तो उन अन्य स्क्रिप्ट विफल हो जाएंगी। नए दायरे को पेश करके, पहचानकर्ता s और sc अब s और sc नामक चर के मुकाबले अलग-अलग (स्थानीय रूप से बाध्य) चर का उल्लेख करते हैं जो वैश्विक दायरे में मौजूद हैं।

+0

कि से सवाल divining के लिए अपने जवाब –

+3

+1 के लिए धन्यवाद ... – Kip

2

मुहावरा (function() {...})(); सीमा अपने चर के दायरे। तो पहले मामले में s (और sc, tp आदि) फ़ंक्शन बॉडी के बाहर कहीं भी पहुंच योग्य नहीं होंगे। दूसरे मामले में आप इसे एक्सेस करने में सक्षम होंगे। तो (function() {...})(); आपको नेमस्पेस प्रदूषण से बचाता है। चाहे आपको इसकी आवश्यकता हो, एक और सवाल है। आप "स्कोप जावास्क्रिप्ट" जैसे कुछ Google को पसंद करना चाहेंगे। एक अच्छा article है।

+0

अपने जवाब के लिए धन्यवाद –

3

(function() {...})(); एक स्व-चालान रहित अज्ञात फ़ंक्शन है यानी कोई ऐसा फ़ंक्शन जिसमें कोई नाम नहीं है जिसे तुरंत निष्पादित किया जाता है। चूंकि जावास्क्रिप्ट में कार्यक्षेत्र है, स्व-चालान रहित फ़ंक्शन का उपयोग करके फ़ंक्शन के अंदर फ़ंक्शन के अंदर चर के दायरे को सीमित करता है, जिससे अन्यथा होने वाले किसी भी विवाद से परहेज किया जा सकता है।

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

(function($) { 

    /* plugin code here */ 

})(jQuery); 
संबंधित मुद्दे

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