2012-05-31 4 views
5

संभव डुप्लिकेट:
What is the purpose of a self executing function in javascript?"स्व लागू बेनामी कार्य" के उद्देश्य के

उम्मीद है कि काफी सीधे आगे सवाल:

क्या स्वयं गुमनाम लागू का उपयोग करने का उद्देश्य है कार्यों? क्या यह चर के साथ वैश्विक दायरे "प्रदूषण" को रोकने के लिए है? या क्या उनका उपयोग करने के अन्य फायदे हैं?

+1

इसे आईआईएफई भी कहा जाता है। Http://benalman.com/news/2010/11/immediately-invoked-function-expression/ देखें। –

उत्तर

10

मेरे व्यक्तिगत अनुभव से बाहर, एक गुंजाइश उत्प्रेरण के लिए अनाम प्रक्रियाएं का उपयोग कर के अलावा अन्य, मैं भी उस में के लिए-छोरों बंद करने के लिए इस्तेमाल किया है। यह उपयोगी हो सकता है जब एक डोम तत्व को इसकी गिनती को स्टोर करने की आवश्यकता होती है और आपके पास jQuery आदि जैसे पुस्तकालयों तक पहुंच नहीं है।

मान लें कि आपके पास 100 DIV तत्व हैं। पहले DIV तत्व पर क्लिक करने से 1 को सचेत करना चाहिए, इसी तरह 56 वें div तत्व पर क्लिक तो 56.

को सचेत करना चाहिए जब इन तत्वों बनाते समय, आप सामान्य रूप से, इस

// Assume myElements is a collection of the aforementioned div elements 

for (var i = 0; i < 100; ++i) { 
    myElements[i].onclick = function() { 
     alert('You clicked on: ' + i); 
    }; 
} 

की तरह कुछ इस 99 सूचित करेंगे कर काउंटर के रूप में वर्तमान में 99 है। i का मान यहां नहीं रखा गया है।

हालांकि, जब एक गुमनाम समारोह समस्या से निपटने के लिए प्रयोग किया जाता है,

for (var i = 0; i < 100; ++i) { 
    (function(count){ 
    myElements[count].onclick = function() { 
     alert('You clicked on: ' + count); 
    }; 
    })(i); 
} 

यहाँ i का मूल्य बनाए रखा है और सही गिनती प्रदर्शित होता है।

4

क्या यह केवल चर के साथ वैश्विक दायरे को "प्रदूषित" रोकने के लिए है?

बहुत अधिक। जितना संभव हो उतना वैश्विक राज्य से बचने और इससे बचने के लिए अपने आप में अच्छे लक्ष्य हैं।

+0

मुझे लगता है कि यह अधिक समझ में आता है। – NaveenDA

3

यह अपना खुद का दायरा बनाना है। यह केवल बेहतर नहीं है क्योंकि आप अब कुछ अन्य (वैश्विक, उदाहरण के लिए) प्रदूषण "प्रदूषित" नहीं करते हैं, यह आपको नाम टकराव की चिंताओं और प्रोग्रामर से रक्षा के लिए गारंटी से बचने देता है जो आपके कार्यों/वस्तुओं/विधियों के आंतरिक भाग के अंदर पोक करना पसंद करता है सभी लाभों के बीच। यह जीसी को आसानी से समझने की अनुमति देता है कि जब कार्य पूरा हो जाता है तो आपको किसी संदर्भित ऑब्जेक्ट की आवश्यकता नहीं होती है।

0

Closures in for-loops स्वयं invoking अज्ञात कार्यों का भी उपयोग करें।

function attachEventsToListItems() { 
    var oList = document.getElementById('myList'); 
    var aListItems = oList.getElementsByTagName('li'); 
    for(var i = 0; i < aListItems.length; i++) { 
     var oListItem = aListItems[i]; 
     // Watch this: 
     oListItem.onclick = (function(value) { 
      return function() { 
       alert(value); 
      } 
     })(i); 
    } 
}