2009-12-24 15 views
13

क्यों कई जावास्क्रिप्ट लाइब्रेरियों इस तरह लग रहे हो?क्यों कई जावास्क्रिप्ट पुस्तकालयों के साथ शुरू करते हैं "(function() {"

(function() { 
    /* code goes here */ 
})(); 

यह एक अनाम समारोह जो तुरंत कहा जाता है परिभाषित करने के लिए क्यों इस के माध्यम से जाना प्रतीत होता है। ? प्रयास

+1

बहुत यकीन है कि यह एक डुप्लिकेट है .... –

उत्तर

17

जावास्क्रिप्ट में नेमस्पेसिंग करने का यह मानक तरीका है। यदि आप केवल

var my_cool_variable = 5; 

यह वैश्विक होगा और अन्य पुस्तकालयों के साथ संघर्ष कर सकता है, जो समान चर का उपयोग करते हैं।

हालांकि, अगर आप

(function() { 
    var my_cool_variable = 5; 
})(); 

कर यह अब गुमनाम समारोह के लिए स्थानीय चर रहा है और कहा कि समारोह के दायरे से बाहर दिखाई नहीं है। आप अभी भी चर के सामने var बताकर सुलभ एपीआई का पर्दाफाश कर सकते हैं, इस तरह यह वैश्विक होगा लेकिन अब आपके पास एक विकल्प है।

2

एक साधारण स्तर पर यह वैश्विक नामस्थान स्वच्छ (ईआर) रहता है

अर्थात्:। इसे प्रभावी ढंग से इसलिए सुनिश्चित पुस्तकालय के भीतर कार्य करता है और चर के चारों ओर लपेटकर की एक परत जोड़ने है वहाँ किसी भी नाम स्थान संघर्ष नहीं कर रहे हैं अन्य कार्यों के साथ हो सकता है अन्य पुस्तकालयों, आदि से उपयोग में

7

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

http://javascript.crockford.com/code.html

नीचे टिप्पणी पर पालन करने के लिए:

तो .....

var variable = 5; // this is accessible to everything in the page where: 

function() 
{ 
    var variable = 7 // this is only available to code inside the function. 
} 

यहाँ जावास्क्रिप्ट में गुंजाइश के बारे में बात डगलस Crockford की साइट के लिए लिंक है

जावास्क्रिप्ट का दायरा थोड़ा "टूटा हुआ" है:

function() 
{ 
    var x = 3; // accessible in the entire function. 
    //for scope reasons, it's better to put var y = 8 here..... 
    if(x != 4) 
    { 
     var y = 8; //still accessible in the entire function. 
        //In other languages this wouldn't be accessible outside 
        //of the if statement, but in JavaScript it is. 

    } 

} 
+1

क्योंकि जावास्क्रिप्ट में कार्यक्षेत्र है लेकिन दायरे को अवरुद्ध नहीं किया गया है। : डी –

+0

आपको लगता है कि टूट गया है? डब्ल्यू 3 सी के वैरिएबल स्कोप के विचार के बारे में: इस उदाहरण पर विचार करते हुए, यदि 'x' का मान' if (x! = 4) {..} 'ब्लॉक के अंदर बदल दिया गया है, तो उस ब्लॉक के अंदर परिवर्तन दिखाई देगा लेकिन इसके बाहर नहीं न ही इसके बाद। – Esko

1

जावास्क्रिप्ट में ब्लॉक स्कोपिंग नहीं है, केवल कार्य स्कोपिंग है। एक अज्ञात फ़ंक्शन को बनाने और तुरंत उपयोग करके, हम गारंटी दे सकते हैं कि इसके स्थानीय चर पूरे वैश्विक नामस्थान पर कदम नहीं उठाएंगे। यह मूल रूप से अन्य पुस्तकालयों के साथ विवादों को सीमित करने का एक तरीका है जो खेल में हो सकते हैं।

0
var $={} // a name space is defined 

(function($) { 
     $.a_variable="some vale" 
     var b_variable = "some more value"; 
})($); 

$.a_variable // acess it like this. 

अब गुमनाम समारोह के अंदर किसी भी बात यह है कि समारोह केवल के बराबर गुंजाइश हम भी वस्तुओं है कि हमारे नाम अंतरिक्ष के लिए गुण के रूप में कार्य कर सकते हैं बना सकते हैं है।

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